Sasha2401:
...
За ранние всем СПАСИБО
Вставьте для начала код через SRC в форме ввода сообщений. Сложно читать Ваш код, когда он весь серый.
Похоже всё верно (не проверял). Но попробуйте цикл считать с другой стороны. Вот так:
for(int i=OrdersTotal()-1; i>=0; i--)
Доброго времени суток форумчани.
Вопрос такой, есть скрипт вот он
Он работает нармально. Им открываю ордера. И вот советник :
Цель советника найти на графике ордера с магик.числом = 17
проверить ордер на покупку или продажу и в случай превышения (или понижения) текущей цены модифицировать стоплосс и тейкпрофит. После запуска в журнале пишет Expert ZdvigLevel EURCHF,H1: removed. Вчём проблема?
За ранние всем СПАСИБО
Первое, что сразу бросается в глаза - при открытии ордеров в советнике (скрипте) присваивайте им соответствующий магик, посредством его задания во внешних переменных
extern int magic = 1000;
и далее его использовать в ф-ии открытия ордеров, типа этого
if (cmd == OP_BUY) ticket = OrderSend(symbol, cmd, volume, Ask, SlipPips, stoploss, takeprofit, comment, magic, expiration, clr); if (cmd == OP_SELL) ticket = OrderSend(symbol, cmd, volume, Bid, SlipPips, stoploss, takeprofit, comment, magic, expiration, clr);
Вот как подобная конструкция трала именно ордеров ЭТОГО экспа организована у меня - работает без сбоев:
Level_new=MarketInfo(Symbol(),MODE_STOPLEVEL ); int orderCount = 0; // ------------------------------------------------Считаем только наши ордера--------------------------- int orderType; for (orderIndex = (OrdersTotal() - 1); orderIndex >= 0; orderIndex--) { if (!OrderSelect(orderIndex, SELECT_BY_POS)) continue; if ((OrderSymbol() != Symbol()) || (OrderMagicNumber() != magic)) continue; orderType = OrderType(); if ((orderType != OP_BUY) && (orderType != OP_SELL)) continue; ticket = OrderTicket( ); // Номер ордера orderLots = OrderLots(); // Lots orderProfit = OrderProfit() + OrderSwap(); // Profit Price = OrderOpenPrice(); // Цена открытия рыночного ордера SL = OrderStopLoss(); // Значение StopLoss ордера TP = OrderTakeProfit(); // Значение TakeProfit ордера if (ticket>0) // Если позиция открылась { while(OrderSelect(ticket,SELECT_BY_TICKET)==false) // Если ордер выбран { Sleep(100); } double OpenPrice=OrderOpenPrice(); } orderCount++; // считаем ордера (не больше i) //----------------------------Тралим последовательно все ордера ЭТОГО ЭКСПА по виду трала------------------ if (UseTrailing && orderCount > 0 && type ==0) // простой трал по аналогии учебнику - в зависимости от параметра trlinloss (тралить ли в зоне лоссов) { if (orderType == OP_BUY) SampleTrailing_texbook (0); // если бай if (orderType == OP_SELL) SampleTrailing_texbook (1); // если селл } }
Вот сама ф-ия трала по учебнику - описание см. на этой страничке последняя функция:
//-------------------------------------------------------------------- // Функция модификации StopLoss всех ордеров указанного типа // Глобальные переменные: // Mas_Ord_New Массив ордеров последний известный // int TralingStop Значение TralingStop(количество пунктов) //-------------------------------------------------------------------- void SampleTrailing_texbook ( int Tip) { int Ticket; // Номер ордера double Price, // Цена открытия рыночного ордера TS, // TralingStop (относит.знач.цены) SL, // Значение StopLoss ордера TP; // Значение TakeProfit ордера bool Modify; // Признак необходимости модифи. //---------------------------------------------------------------------- Level_new=MarketInfo(Symbol(),MODE_STOPLEVEL ); // мин уровень трала Modify=false; // Пока не назначен к модифи Price = OrderOpenPrice(); // Цена открытия ордера SL = OrderStopLoss(); // Значение StopLoss ордера TP = OrderTakeProfit(); // Значение TakeProft ордера Ticket= OrderTicket(); // Номер ордера if (TralingStop<Level_new) // Если меньше допустимого.. TralingStop=Level_new; // .. то допустимый TS=TralingStop*Point; // То же в относит.знач.цены //----------------------------------------------------------------- switch(Tip) // Переход на тип ордера { case 0 : // Ордер Buy if (trlinloss==false){ // тралим только профит if (NormalizeDouble(SL,Digits)<// Если ниже желаемого.. NormalizeDouble(Bid-TS,Digits) && NormalizeDouble(Price,Digits)< NormalizeDouble(Bid-TS,Digits)) { // ..то модифицируем его: SL=Bid-TS; // Новый его StopLoss Modify=true; // Назначен к модифи. } } else { // тралим с зоны лоссов if (NormalizeDouble(SL,Digits)<// Если ниже желаемого.. NormalizeDouble(Bid-TS,Digits)) { // ..то модифицируем его: SL=Bid-TS; // Новый его StopLoss Modify=true; // Назначен к модифи. } } break; // Выход из switch case 1 : // Ордер Sell if (trlinloss==false) { // тралим профит if ((NormalizeDouble(SL,Digits)> // Если выше желаемого.. NormalizeDouble(Ask+TS,Digits)|| NormalizeDouble(SL,Digits)==0) && NormalizeDouble(Price,Digits)>NormalizeDouble(Ask+TS,Digits)) //.. или нулевой(!) { // ..то модифицируем его SL=Ask+TS; // Новый его StopLoss Modify=true; // Назначен к модифи. } } else { // тралим с зоны лоссов if (NormalizeDouble(SL,Digits)>// Если выше желаемого.. NormalizeDouble(Ask+TS,Digits)|| NormalizeDouble(SL,Digits)==0)//.. или нулевой(!) { // ..то модифицируем его SL=Ask+TS; // Новый его StopLoss Modify=true; // Назначен к модифи. } } } // Конец switch if (Modify==false) // Если его не надо модифи.. return; // ..то идём по циклу дальше bool Ans=OrderModify(Ticket,Price,SL,TP,0);//Модифицируем его! //---------------------------------------------------------------------- if (Ans==false) // Не получилось :( { // Поинтересуемся ошибками: Print("Не удалось модифицировать ордер №",OrderTicket(),". Ошибка: ",GetLastError()); return; // .. то уходим. } } // Выход из пользов. функции
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Доброго времени суток форумчани.
Вопрос такой, есть скрипт вот он
Он работает нармально. Им открываю ордера. И вот советник :
Цель советника найти на графике ордера с магик.числом = 17
проверить ордер на покупку или продажу и в случай превышения (или понижения) текущей цены модифицировать стоплосс и тейкпрофит. После запуска в журнале пишет Expert ZdvigLevel EURCHF,H1: removed. Вчём проблема?
За ранние всем СПАСИБО