int Slippage = 2; double Lot = 0.07; #define Per 0x1 int begin=0,OP_; //-------------------------------------------------------------------------------------------------------// <<>> // <<Командный центр>> // // Условия активации модели 1 // if ....................??? // Модель поведения 1 int Control_param = 55, // TralStop = Control_param*2, значение учавствует в расчете SL Control_param_2 = 25, // Значение прередается в цикл модификации ордеров Control_param_3 = 15, // Используется для вычисления SL всех ордеров Control_param_4 = 40, // Обозначает ту прибыль при достижении которой сработает "раздатка" значений Lot //----------------------------------------------------------------------// //------------Изменять только при изменении стартового баланса----------// Control_param_5 = 50, // Первое (нижнее) значение баланса Control_param_6 = 600; // Второе (верхнее) значение баланса //----------------------------------------------------------------------// // Условия активации модели 2 // if ....................??? // Модель поведения 2 // int Control_param = ?, // TralStop = Control_param*2 // Control_param_2 = ?, // Значение прередается в цикл модификации ордеров // Control_param_3 = ?, // Используется для вычисления SL всех ордеров // Control_param_4 = ?, // Обозначает ту прибыль при достижении которой сработает "раздатка" значений Lot // Control_param_5 = ?, // Первое (нижнее) значение баланса // Control_param_6 = ?; // Второе (верхнее) значение баланса // Условия активации модели 3 // if ....................??? // Модель поведения 3 // int Control_param = ?, // TralStop = Control_param*2 // Control_param_2 = ?, // Значение прередается в цикл модификации ордеров // Control_param_3 = ?, // Используется для вычисления SL всех ордеров // Control_param_4 = ?, // Обозначает ту прибыль при достижении которой сработает "раздатка" значений Lot // Control_param_5 = ?, // Первое (нижнее) значение баланса // Control_param_6 = ?; // Второе (верхнее) значение баланса //-------------------------------------------------------------------------------------------------------// >><< //-------------------------------------------------------// <<>> // закрытие покупок int ClOrder?(int MagicNumber) { for(int i = 0; i <= OrdersTotal(); i++) { if(OrderSelect(i, SELECT_BY_POS) == false) continue; return(1); } return(0); } //-------------------------------------------------------// >><< //-----------------------------------------------------------------------------------------------------------------------------------------------------------------// <<>> // покупка void OpenBuy() { int tickbuy = OrderSend(Symbol (), OP_BUY, Lot, NormalizeDouble(Ask,Digits), Slippage, Ask-(Control_param-Control_param_3)*Point,0, NULL, Per, 0, Green); OP_=OP_BUY; } // продажа void OpenSell() { int ticksell = OrderSend(Symbol (), OP_SELL, Lot, NormalizeDouble(Bid,Digits), Slippage, Bid+(Control_param-Control_param_3)*Point,0,NULL, Per, 0, Red); OP_=OP_SELL; } //-----------------------------------------------------------------------------------------------------------------------------------------------------------------// >><< //-----------------------------------------------------------------------------------------------------------------------------------------------------------------// <<>> // Компенсационные позиции - Блок отключен // void OpenSell_Mod() // { // int ticksell = OrderSend(Symbol (), OP_SELL, 0.02, NormalizeDouble(Bid,Digits), Slippage,Bid+(Control_param-Control_param_3)*Point,0,NULL, Per, 0, Red); // } // void OpenBuy_Mod() // { // int tickbuy1 = OrderSend(Symbol (), OP_BUY, 0.02, NormalizeDouble(Ask,Digits), Slippage,Ask-(Control_param-Control_param_3)*Point,0,NULL, Per, 0, Green); // } //-----------------------------------------------------------------------------------------------------------------------------------------------------------------// >><< int start(){ if(begin==0) OpenSell(); string Symb=Symbol(); for(int i=1; i<=OrdersTotal(); i++) { //-------------------------------------------------------------------------------// Раздатка значений Lot <<>> double Prots = 0.10, Min_Lot = MarketInfo(Symb,MODE_MINLOT), Step = MarketInfo(Symb,MODE_LOTSTEP), Balance = AccountFreeMargin(), One_Lot = MarketInfo(Symb,MODE_MARGINREQUIRED), Pr = OrderProfit(), Lot_mod; int Type = OrderType(), TS = (Control_param*2); //---------------------------------------------------------------------- Блок управления балансом <<>> if (Pr>Control_param_4) { Lot_mod = 0.01; } else { int BalanceExcessIn100s1 = MathFloor( ( Balance - Control_param_5) / 100.01 ); Lot_mod = BalanceExcessIn100s1 * 0.01 + 0.01; int BalanceExcessIn100s = MathFloor( ( Balance - Control_param_6) / 100.01 ); Lot_mod = BalanceExcessIn100s * 0.01 + 0.1; } //----------------------------------------------------------------------- Блок управления балансом >><< //Lot_mod = MathFloor(Free*Prots/One_Lot/Step)*Step; //---------------// Lot = Lot_mod; //---------------// //-------------------------------------------------------------------------------// Раздатка значений Lot >><< //-----------------------------------------------------------------------------------------// Блок модификации ордеров <<>> if (OrderSelect(i-1,SELECT_BY_POS)==true) { int Tip=OrderType(); if(OrderSymbol()!=Symb||Tip>1)continue; double SL=OrderStopLoss(); while(true) { bool Modify=false; switch(Tip) { case 0 : if (NormalizeDouble(SL,Digits) < NormalizeDouble(Bid-TS*Point,Digits)) { SL=Bid-(Control_param-Control_param_2)*Point; string Text="Buy "; Modify=true; } break; case 1 : if (NormalizeDouble(SL,Digits) > NormalizeDouble(Ask+TS*Point,Digits)|| NormalizeDouble(SL,Digits)==0) { SL=Ask+(Control_param-Control_param_2)*Point; Text="Sell "; Modify=true; } break; } if (Modify==false) break; //------------------------------------------------------------- Вариант 1 <<>> double Price =OrderOpenPrice(); int Ticket =OrderTicket(); Alert ("Модификация ",Text,Ticket,". Ждём ответ.."); bool Ans1 = OrderModify(Ticket,Price,SL,0,0); if (Ans1==true) { Alert ("Ордер ",Text,Ticket," модифицирован:)"); break; } //------------------------------------------------------------- Вариант 1 >><< //--------------------------------------------------------------------------------------// Вариант 2 <<>> // double Price =OrderOpenPrice(); // int Ticket =OrderTicket(); // bool Ans1=OrderModify(Ticket,Price,SL,0,0); // if (Ans1==true) // { // int orderSell; // if (orderSell < 1) // { // orderSell = OrderSend(Symbol(),OP_SELL, Lot,Bid,3,Ask+Try*Point,0); // } // else{continue;} // break; //} // Блок системы управления балансом //--------------------------------------------------------------------------------------// Вариант 2 >><< break; } // Конец цикла мод. } // Конец анализа орд. } // Конец перебора орд. //-----------------------------------------------------------------------------------------// Блок модификации ордеров >><< //--------------------------------------// Блок (стандарт) if(ClOrder?(Per)==0) { if(OP_==0) { OpenSell(); } else { OpenBuy(); } } begin=1; return(0); } //------------------------------// Блок с ком. позициями. Блок отключен // if(ClOrder?(STUPID)==0){ // if(OP_==0) // { // OpenSell(); // if (Lot == 0.01) // { // OpenBuy_Mod(); // }} // else // { // OpenBuy(); // if (Lot == 0.01) // { // OpenSell_Mod(); // }}} // begin=1; // return(0); // } //------------------------------// //--------------------------------------//