Удаление отложенного ордера - страница 2

 
khorosh:
А что вас не устраивает или не понятно в предложенном мной варианте? Ведь проще уже некуда - используются две готовые функции.
Нет вы меня не правильно поняли. Все прекрасно в вашем советнике. Только для меня это пока не понятно.
А можно тоже самое - только для одного ордера.? Вы можете такой скрипт написать, как пример?
 
liana:
Нет вы меня не правильно поняли. Все прекрасно в вашем советнике. Только для меня это пока не понятно.
А можно тоже самое - только для одного ордера.? Вы можете такой скрипт написать, как пример?

Как вы можете говорить о моём советнике, если вы не видели ни одного?

Я же вам код на 1 странице написал из двух функций, но это ещё не советник. В окне навигатора нажмите на любой советник правой кнопки мыши и выберите создать советник. Мастер создаст вам шаблон советника. В пустое тело функции старт скопируйте мой код из двух функций с 1 страницы, а вне функции старт разместите коды этих двух функций и скомпилируйте . Чтобы он работал перетащите его из окна навигатора на график.

 
liana:

Может ли кто-нибудь помочь со скриптом (как можно проще (без наворотов), чтобы было понятно, потому что я только учусь).

Условие простое.
Есть только один открытый ордер и один отложенник (мартингейл). Если первый закрывается по профиту, то отложенник сразу удаляется. Наверное для гуру это проще простого. А я уже все мозги сломала.
Я пока только научилась открывать ордера, а с закрытием - туго. Все что я нахожу на интернете - очень наворочено для начинающего или теория, которую непонятно как применять. А простых примеров очень мало. Я нашла только здесь (может кому из начинающих тоже пригодится)

Помогите пожалуйста.


Пожалуйста;

тянеш мышкой на график к тому ордеру который надо удалить

и все

//+------------------------------------------------------------------+
//|                                                  OrderDelete.mq4 |
//|                      Copyright © 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2012, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
  int stlw=MarketInfo(Symbol(),MODE_STOPLEVEL);
  int spr =MarketInfo(Symbol(),MODE_SPREAD);  
  double prise=WindowPriceOnDropped();
  if(prise==0){
    Alert("Цена не определена!");
    return;
  } 
  for(int i=0;i<OrdersTotal();i++){
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
      if(OrderSymbol()==Symbol()){
        if(OrderType()>1){
          if(OrderCloseTime()==0){
            if(MathAbs(OrderOpenPrice()-prise)<spr*Point*2){
              if(!OrderDelete(OrderTicket())){
                Alert("Ошибка закрытия №",GetLastError());
              }else{PlaySound("expert.wav");}
            }
          }  
        }
      }
    }
  }  
  
   return(0);
  }
//+------------------------------------------------------------------+
 
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void ClosePending(int MagickNum=0){int i,time=0;double prof;
   for(i=OrdersHistoryTotal()-1;i>=0;i--){//перебираем все закрытые ордера
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)){//находим и выбираем ордер по номеру
         if(OrderSymbol()!=Symbol()){continue;}//фильтр по символу (если не наш, то пропускаем)
         if(MagickNum!=0&&OrderMagicNumber()!=MagickNum){continue;}//фильтр по магику, если он есть
         if(OrderType()>1){continue;}//закрытый отложенник - пропускаем
         if(OrderCloseTime()>time){//ищем самый последний по времени закрытия не отложенный ордер
            time = OrderCloseTime();
            prof = OrderProfit();//запоминаем профит
         }
      }
   }
   if(prof<0){return;}// если профит отрицательный (не ТП) ничего не делаем
   if(time==0){return;}// если ордер удовлетворяющий условиям не найден - на выход
   // если все условия совпали приступаем к удаалению отложенника(ов)
   for(i=OrdersTotal();i>=0;i--){//перебираем все открытые сейчас ордера
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){//находим и выбираем ордер по номеру
         if(OrderSymbol()!=Symbol()){continue;}//фильтр по символу (если не наш, то пропускаем)
         if(MagickNum!=0&&OrderMagicNumber()!=MagickNum){continue;}//фильтр по магику, если он есть
         if(OrderType()<2){continue;}//не отложенник - пропускаем
         OrderDelete(OrderTicket());// все что осталось =  отложенник, удаляем.      
      }
   }
   return;
}
 
khorosh:

Как вы можете говорить о моём советнике, если вы не видели ни одного?

Я же вам код на 1 странице написал из двух функций, но это ещё не советник. В окне навигатора нажмите на любой советник правой кнопки мыши и выберите создать советник. Мастер создаст вам шаблон советника. В пустое тело функции старт скопируйте мой код из двух функций с 1 страницы, а вне функции старт разместите коды этих двух функций и скомпилируйте . Чтобы он работал перетащите его из окна навигатора на график.


Я предложил Ваш советник, см. 1стр.
 
r772ra:


Пожалуйста;

тянеш мышкой на график к тому ордеру который надо удалить

и все


Хороший был наборчик, правда устарел уже морально, но иногда еще им пользуюсь.

А вот вешать сверху чужой копирайт, да еще и на 3 года позже издания нехорошо...

Найдите 10 отличий...

//+------------------------------------------------------------------+
//|                                               _DEL_ONE_ORDER.mq4 |
//|                      Copyright © 2009, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
  int stlw=MarketInfo(Symbol(),MODE_STOPLEVEL);
  int spr =MarketInfo(Symbol(),MODE_SPREAD);  
  double prise=WindowPriceOnDropped();
  if(prise==0){
    Alert("Цена не определена!");
    return;
  } 
  for(int i=0;i<OrdersTotal();i++){
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
      if(OrderSymbol()==Symbol()){
        if(OrderType()>1){
          if(OrderCloseTime()==0){
            if(MathAbs(OrderOpenPrice()-prise)<spr*Point*2){
              if(!OrderDelete(OrderTicket())){
                Alert("Ошибка закрытия №",GetLastError());
              }else{PlaySound("expert.wav");}
            }
          }  
        }
      }
    }
  }  
  
   return(0);
  }
//+------------------------------------------------------------------+
 
Roll:

Я предложил Ваш советник, см. 1стр.
Это не мой советник, я лишь помог устранить в нём ошибки компиляции.
 
FAQ:

СУПЕР - это я уже могу понять. Спасибо, буду завтра разбираться. :)
 
это еще не все, вам нужно будет запустить эту функцию, только тогда, когда у вас на графике останется только отложенный ордер, эту часть напишите самостоятельно, на основе того что я вам дал.
 
r772ra:


Пожалуйста;

тянеш мышкой на график к тому ордеру который надо удалить

и все


Если все мышкой делать, то тогда зачем советники? :))) Неее, надо чтобы он сам срабатывал, когда один единстенный открытый ордер закрылся по профиту.

Причина обращения: