@Konstantin Nikitin Вам проще! вы спец! Я учусь! switch вообще пока не использовал!
if(!OrderSelect(i,SELECT_BY_POS)) continue;
if(OrderSymbol()!=Symbol()) continue;
А это как прочитать? Если (Ордер не выбран) продолжить;
Если (Текущий Символ не равен Символу) продолжить; Так? Или как?
Друзья, кто знает как реализовать: советник может получить абсолютное значение индикатора, например iStohastic(). А как определить что индикатор покинул зону перекупленности или перепроданности?
Визуально например как индикатор Стохастик с уровнями 80 и 20.
void STOP_TAKE(void)
{
int SPREAD = (int)MarketInfo(Symbol(),MODE_SPREAD);
if (stoploss<STOPLEVEL) stoploss=0;
if (takeprofit<STOPLEVEL) takeprofit=0;
for(int i=0; i<OrdersTotal(); i++)
{
if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
if(OrderSymbol()!=Symbol()) continue;
int tip = OrderType();
if( tip!=OP_BUY && tip!=OP_BUYSTOP && tip!=OP_BUYLIMIT &&
tip!=OP_SELL && tip!=OP_SELLSTOP && tip!=OP_SELLLIMIT ) continue;
// переменные которые будут использоваться в любых ордерахint Ticket = OrderTicket();
double OOP = OrderOpenPrice(),
OSL = OrderStopLoss(),
OTP = OrderTakeProfit();
//---if( OrderMagicNumber() == Magic )
{ //----------Если Ордера Советникаswitch(tip)
{
caseOP_BUY:
caseOP_BUYSTOP:
caseOP_BUYLIMIT:
{
if (takeprofit!=0) TP = NormalizeDouble(OOP + takeprofit*Point,Digits); else TP=OTP;
if (stoploss!=0) SL = NormalizeDouble(OOP - (stoploss+SPREAD)* Point,Digits); else SL=OSL;
if (OrderModify(Ticket,OOP,SL,TP,0,White)) Print("STOP_TAKE",Ticket," SL ",OSL," -> ",SL," TP ",OTP," -> ",TP);
elsePrint(Symbol()," Error STOP_TAKE",GetLastError()," Ticket ",Ticket);
}
break;
// end casedefault:
{
if (takeprofit!=0) TP = NormalizeDouble(OOP - takeprofit*Point,Digits); else TP=OTP;
if (stoploss!=0) SL = NormalizeDouble(OOP + (stoploss+SPREAD)* Point,Digits); else SL=OSL;
if (OrderModify(Ticket,OOP,SL,TP,0,White)) Print("STOP_TAKE",Ticket," SL ",OSL," -> ",SL," TP ",OTP," -> ",TP);
elsePrint(Symbol()," Error STOP_TAKE",GetLastError()," Ticket ",Ticket);
} // end case
} // end switch
}
else
{ //----------Если Ордера Оператораswitch(tip)
{
caseOP_BUY:
caseOP_BUYSTOP:
caseOP_BUYLIMIT:
{
if (takeprofit!=0) TP = NormalizeDouble(OOP + takeprofit*Point,Digits); else TP=OTP;
if (stoploss!=0) SL = NormalizeDouble(OOP - (stoploss+SPREAD)* Point,Digits); else SL=OSL;
if (OrderModify(Ticket,OOP,SL,TP,0,White)) Print("STOP_TAKE",Ticket," SL ",OSL," -> ",SL," TP ",OTP," -> ",TP);
elsePrint(Symbol()," Error STOP_TAKE",GetLastError()," Ticket ",Ticket);
}
break;
// end casedefault:
{
if (takeprofit!=0) TP = NormalizeDouble(OOP - takeprofit*Point,Digits); else TP=OTP;
if (stoploss!=0) SL = NormalizeDouble(OOP + (stoploss+SPREAD)* Point,Digits); else SL=OSL;
if (OrderModify(Ticket,OOP,SL,TP,0,White)) Print("STOP_TAKE",Ticket," SL ",OSL," -> ",SL," TP ",OTP," -> ",TP);
elsePrint(Symbol()," Error STOP_TAKE",GetLastError()," Ticket ",Ticket);
} // end case
} // end switch
} // end if
} // end for
} // end STOP_TAKE
Хотя у вас совершенно одинаковая логика при модификации ордеров советника и других. Зачем вам именно их различать не совсем понятно. Но сам принцип думаю вам пригодиться.
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
@Konstantin Nikitin Вам проще! вы спец! Я учусь! switch вообще пока не использовал!
Rewerpool:
А это как прочитать? Если (Ордер не выбран) продолжить;
Если (Текущий Символ не равен Символу) продолжить; Так? Или как?
Оператор continue
@Konstantin Nikitin Понял, значит так: Поправите, если что!
Да ещё вот вопрос: !OrderSelect - Это значит: Не Ордер или Не выбран Ордер?
Понял, значит так: Поправите, если что!
Если ордер не выбран, выбирается следующий элемент цикла
Операции и выражения и там смотрим Логические операции
добавил ещё так:
Зачем вообще так писать?
Если только ставить советник на один символ, а работать он будет на всех? И магик свой увидит!
Совсем запутался!
Друзья, кто знает как реализовать: советник может получить абсолютное значение индикатора, например iStohastic(). А как определить что индикатор покинул зону перекупленности или перепроданности?
Визуально например как индикатор Стохастик с уровнями 80 и 20.
Rewerpool: Ну вот так вроде без ошибок.
Хотя у вас совершенно одинаковая логика при модификации ордеров советника и других. Зачем вам именно их различать не совсем понятно. Но сам принцип думаю вам пригодиться.