Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 507

[Удален]  
Tema97:
Подскажите пожалуйста как сделать чтоб покупало 1 раз и после тейк профит не чего не делало - а ждало нового пробития (код записан так - if (cena>ma && cena> ma2 && cena> Ma && cena>Ma1) ???

Проверяйте тип последней закрытой позиции, если был buy то не открывать ещё раз buy, а ждать сигнал sell и наоборот.

Функция GetTypeLastClosePos().

Эта функция возвращает тип последней закрытой позиции или -1. Более точный отбор учитываемых позиций задаётся внешними параметрами:

  • sy - Наименование рыночного инструмента. Если задать этот параметр, то функция учтёт позиции только заданного инструмента. Значение по умолчанию - "" означает любой рыночный инструмент. NULL означает текущий инструмент.
  • mn - Идентификатор позиции, MagicNumber. Значение по умолчанию -1 означает любой идентификатор.
  • //+----------------------------------------------------------------------------+
    //|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
    //+----------------------------------------------------------------------------+
    //|  Версия   : 19.02.2008                                                     |
    //|  Описание : Возвращает тип последней закрытой позиции или -1               |
    //+----------------------------------------------------------------------------+
    //|  Параметры:                                                                |
    //|    sy - наименование инструмента   (""   - любой символ,                   |
    //|                                     NULL - текущий символ)                 |
    //|    mn - MagicNumber                (-1   - любой магик)                    |
    //+----------------------------------------------------------------------------+
    int GetTypeLastClosePos(string sy="", int mn=-1) {
      datetime t=0;
      int      i, k=OrdersHistoryTotal(), r=-1;
    
      if (sy=="0") sy=Symbol();
      for (i=0; i<k; i++) {
        if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
          if ((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn)) {
            if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
              if (t<OrderCloseTime()) {
                t=OrderCloseTime();
                r=OrderType();
              }
            }
          }
        }
      }
      return(r);
    }
    https://www.mql5.com/ru/forum/131859/page4#434227
Только "Полезные функции от KimIV". - MQL4 форум
  • www.mql5.com
Только "Полезные функции от KimIV". - MQL4 форум
 
Leanid Aladzyeu:

 

if(Ask ==("линия"+100*Point)) 

покупаем

 

iMA- дынные индикатора МА 

а почему именно аск а не бид или это не принципиально ???
[Удален]  
Tema97:
а почему именно аск а не бид или это не принципиально ???
Видимо хочет переиграть спред так как бай открывается по аск, но по бид будет более корректно условие.
 
Vladimir Zubov:
Видимо хочет переиграть спред так как бай открывается по аск, но по бид будет более корректно условие.
Спасибо за ифну))) 
 
Tema97:
а почему именно аск а не бид или это не принципиально ???
Аск это верхняя цена  , бид нижняя все что между спред. .  для покупки ориентируйте на бид индикаров , для продажи наоборот  . этотчто бы советник по индикароку работал с учётом спреда
[Удален]  
Leanid Aladzyeu:
...для покупки ориентируйте на бид индикаров , для продажи наоборот  . этотчто бы советник по индикароку работал с учётом спреда

Наверно, все таки, наоборот)

И... про какие "индикары" Вы говорите?)))) 

 

у меня продолжение вопроса есть --- как сделать чтоб например в деопозоне 100-200 пунктов от линии  покупало у меня только код на ровно 100 есть if(Ask ==("линия"+100*Point)) )  например между 100 и 300 пунктами ) а может быть такое что например по достижению 100 пунктов не покупает  мол рынок быстро дернулся и тд -( при  сильно движение (например  (Non Farm ) - ) лично у меня не один раз была сильная задержка перед закрытием сделки или стоп лос когда перетаскивал) 

 
Tema97:

у меня продолжение вопроса есть --- как сделать чтоб например в деопозоне 100-200 пунктов от линии  покупало у меня только код на ровно 100 есть if(Ask ==("линия"+100*Point)) )  например между 100 и 300 пунктами ) а может быть такое что например по достижению 100 пунктов не покупает  мол рынок быстро дернулся и тд -( при  сильно движение (например  (Non Farm ) - ) лично у меня не один раз была сильная задержка перед закрытием сделки или стоп лос когда перетаскивал) 

боже мой.    >100 и <300
 
Господа программисты.В чем косяк???Привязал наконец то мартингейла.Посреди дня советника в таком виде подключил(уже прошло несколько сделок этого же советника,но в недоделанном до этого состояния виде),-советник работал нормально,мартингейл работал,вывел убытки за полдня в плюс.На следующий день с утра включил терминал,ушел на работу,вечером-ни одной сделки.Мартингейл увеличивает лот при убыточной сделке,в остальных случаях-стандартный лот.Или я что-то не понимаю???
void OnTick()
  {
   datetime EaStartTime = StringToTime(StartTime);  // время начала работы советника
   datetime EaEndTime = StringToTime(EndTime);      // время окончания работы советника
   datetime CurrTime = TimeCurrent();               // это если нужно взять время терминала
   if(CurrTime<EaStartTime || CurrTime>=EaEndTime)
      return;                                       // если еще не время торговать - выход
     {
      MacdCurrent=iMACD(NULL,0,InpFastEMA,InpSlowEMA,InpSignalSMA,Macd_Applied_Price,MODE_MAIN,0);
      SignalCurrent=iMACD(NULL,0,InpFastEMA,InpSlowEMA,InpSignalSMA,Macd_Applied_Price,MODE_SIGNAL,0);
      SignalMAPrevious=iMA(NULL,0,InpMAPeriod,InpMAShift,InpMAMethod,MA_Applied_Price,1);
      SignalMAThis=iMA(NULL,0,InpMAPeriod,InpMAShift,InpMAMethod,MA_Applied_Price,0);
      SignalParabolic=iSAR(NULL,0,InpSARStep,InpSARMaximum,0);
      SignalStochastic_5=iStochastic(NULL,5,InpKPeriod,InpDPeriod,InpSlowing,MODE_SMA,0,1,0);
      MainStochastic_5=iStochastic(NULL,5,InpKPeriod,InpDPeriod,InpSlowing,MODE_SMA,0,0,0);
      SignalStochastic=iStochastic(NULL,0,InpKPeriod,InpDPeriod,InpSlowing,MODE_SMA,0,1,0);
      MainStochastic=iStochastic(NULL,0,InpKPeriod,InpDPeriod,InpSlowing,MODE_SMA,0,0,0);
      SignalCCIPrevious=iCCI(NULL,0,InpCCIPeriod,0,1);
      SignalCCIThis=iCCI(NULL,0,InpCCIPeriod,0,0);
      if(CountTrades()==0) CheckForOpen();
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CheckForOpen()
 {if(ModLots())
  {
      //-----Ставим ордер на покупку.
    if(SignalCurrent<MacdCurrent && SignalMAPrevious<SignalMAThis && 
      Ask>SignalParabolic && SignalStochastic_5<MainStochastic_5&&SignalStochastic<MainStochastic&&
      SignalCCIPrevious<SignalCCIThis)
      {
       ticket=OrderSend(NULL,OP_BUY,lot,Ask,slippage,0,0,exptime,magic,0,Blue);
       if(ticket>0)
          return;
      }
//-----Ставим ордер на продажу.
    if(SignalCurrent>MacdCurrent && SignalMAPrevious>SignalMAThis && 
      Bid<SignalParabolic && SignalStochastic_5>MainStochastic_5&&SignalStochastic>MainStochastic&&
      SignalCCIPrevious>SignalCCIThis)
      {
       ticket=OrderSend(NULL,OP_SELL,lot,Bid,slippage,0,0,exptime,magic,0,Red);
       if(ticket>0)
          return;
      }
  }
 }
//+------------------------------------------------------------------+
int CountTrades()
  {
   int count=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic)
            count++;
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
bool ModLots()
  {
    for(int i=OrdersHistoryTotal()-1;i>=0;i--)
      {
       if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continue;
       if((OrderMagicNumber()==magic) && (OrderSymbol()==Symbol()))
         {
          if(OrderProfit()<0)
            {lot=OrderLots()*LotMarti;  break;}
          else { lot=Lots; break;}
         }
      }
   return(true);
  }
//+------------------------------------------------------------------+
 
Здравствуйте. В справочнике mql4 сказано что обработка событий Timer и ChartEvent в тестере стратегий не поддерживается. Соответственно, кнопки (OBJ_BUTTON) не работают (точнее, ничего не происходит при нажатии). Но на триал версию этого эксперта это правило, почему-то, не распространяется. Подскажите пожалуйста, почему так происходит и как заставить работать кнопки в тестере?