[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 832

 
Vinin:

А в следующий раз что изменится?
Тоже самое. Закрывается позиция - устанавливается отложенный ордер и т.д. Функция, которая возвращает последнее значение (например OrderCloseTime()) имеется. С каждым тиком я получаю значение времени закрытия последней закрытой позиции (скажем позиция №1). При закрытии следующей позиции (позиция №2) с новым тиком я получаю время закрытия уже этой (№2) позиции. Значение OrderCloseTime() изменилось относительно предыдущего. И так далее. Мне не важно как и насколько изменилась переменная. Мне важен сам факт изменения переменной. Это как логическая операция: если OrderCloseTime() последней закрытой позиции больше чем OrderCloseTime() предпоследней, то сделать БЛА-БЛА-БЛА. Также - если OrderClosePrice() последней закрытой позиции не равно OrderClosePrice() предпоследней, то сделать БЛА-БЛА-БЛА. Или может нельзя провести такое сравнение?
 
Вот какой вопрос назрел. Допустим в советнике сигнал на покупку появляется, когда индикатор (для примера взял CCI) пересекает некий уровень (красная линия) снизу вверх, а сигнал на продажу когда соответственно когда сверху вниз. Как сделать так, чтобы во время формирования бара A ордер мог открыться только один раз? Т.е. допустим индикатор при формировании бара A несколько раз пересекает уровень (красная линия) то вниз, то вверх. Как я уже сказал нужно сделать так, чтобы при этом ордер открывался только один раз.

При этом надо чтобы при сигнале на продажу, который будет получен на баре D (ситуация 2 на графике) ордер, открытый на баре A не закрывался и вообще никак не затрагивался.

Т.е. после своего открытия ордера никак не контролируются советником.


Заранее спасибо.

 

Помогите, пожалуста, прикрутить к эксперту кусочек кода Секвента Демарка https://www.mql5.com/ru/code/7372

вот так не роботает:

num=0:

for(i=bars; i>=0; i--)
{
if ((iClose(NULL,PERIOD_M5,i+1)<iClose(NULL,PERIOD_M5,i+4) && num!=0 )) {
num++;


if ((iClose(NULL,PERIOD_M5,i+1)<iClose(NULL,PERIOD_M5,i+4))
buy.......

if (num==9)
close........

 
Vinin:


1. Сосчитать количество оредров первого типа

2. Сосчитать количество ордеров второго типа

3. Сравнить результаты


Уважаемый Vinin. Большое Вам спасибо!
 
Forrim:
Вот какой вопрос назрел. Допустим в советнике сигнал на покупку появляется, когда индикатор (для примера взял CCI) пересекает некий уровень (красная линия) снизу вверх, а сигнал на продажу когда соответственно когда сверху вниз. Как сделать так, чтобы во время формирования бара A ордер мог открыться только один раз? Т.е. допустим индикатор при формировании бара A несколько раз пересекает уровень (красная линия) то вниз, то вверх. Как я уже сказал нужно сделать так, чтобы при этом ордер открывался только один раз.

При этом надо чтобы при сигнале на продажу, который будет получен на баре D (ситуация 2 на графике) ордер, открытый на баре A не закрывался и вообще никак не затрагивался.

Т.е. после своего открытия ордера никак не контролируются советником.


Заранее спасибо.

Вообще, CCI скачет так дико, что лучше проверять после того как Бар завершился и открылся новый.

Ну а если сильно важно по текущему, то при каждом пересечении надо запомнить время открытия свечи в глобальной переменной и потом проводить проверку, отличается ли время (если да то открывается ордер) или оно то же самое (=> не открывается ордер).

 
Forrim:
Вот какой вопрос назрел. Допустим в советнике сигнал на покупку появляется, когда индикатор (для примера взял CCI) пересекает некий уровень (красная линия) снизу вверх, а сигнал на продажу когда соответственно когда сверху вниз. Как сделать так, чтобы во время формирования бара A ордер мог открыться только один раз? Т.е. допустим индикатор при формировании бара A несколько раз пересекает уровень (красная линия) то вниз, то вверх. Как я уже сказал нужно сделать так, чтобы при этом ордер открывался только один раз.

При этом надо чтобы при сигнале на продажу, который будет получен на баре D (ситуация 2 на графике) ордер, открытый на баре A не закрывался и вообще никак не затрагивался.

Т.е. после своего открытия ордера никак не контролируются советником.


Заранее спасибо.

Если позиция данного типа уже открыта, то больше не открывать.
 
//--------------------------------------------------------------- 1 --
                                   // Численные значения для М15
extern double StopLoss   =20;      // SL для открываемого ордера
extern double TakeProfit =20;      // ТР для открываемого ордера
extern double Step_Sar=0.02;       // Шаг Sar
extern double Maximum_Sar=0.2;     // Максимум Sar
extern double Lot=0.01;            // Жестко заданное колич. лотов
bool Work=true;                    // Эксперт будет работать.
//--------------------------------------------------------------- 2 --
int start()
  { 
   int   
   Total,                           // Количество ордеров в окне 

   Ticket;                          // Номер ордера
   
   double
   Sar_1 ,                          // Значен. Sar текущее
   Sar_0 ,                          // Значение Sar предыдущей свечки      
   Price,                           // Цена ордера
   SL,                              // SL ордера 
   TP;                              // TP ордера
   
   bool
   Ans  =false,                     // Ответ сервера после закрытия
   Cls_B=false,                     // Критерий для закрытия  Buy
   Cls_S=false,                     // Критерий для закрытия  Sell
   Opn_B=false,                     // Критерий для открытия  Buy
   Opn_S=false;                     // Критерий для открытия  Sell
   
//--------------------------------------------------------------- 3 --   
   // Учёт ордеров   

   Total=0;                                     // Количество ордеров
   for(int i=1; i<=OrdersTotal(); i++)          // Цикл перебора ордер
     {
      if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
        {                                       // Анализ ордеров:
         if (OrderSymbol()!=Symbol())continue;      // Не наш фин. инструм
         if (OrderType()>1)                     // Попался отложенный
           {
            Alert("Обнаружен отложенный ордер. Эксперт не работает.");
            return;                             // Выход из start()
           }
         Total++;                               // Счётчик рыночн. орд
         if (Total>1)                           // Не более одного орд
           {
            Alert("Несколько рыночных ордеров. Эксперт не работает.");
            return;                             // Выход из start()
           }

   
     
       
        
    
         
         Price =OrderOpenPrice();               // Цена выбранн. орд.
         SL    =OrderStopLoss();                // SL выбранного орд.
         TP    =OrderTakeProfit();              // TP выбранного орд.
         Lot   =OrderLots();                    // Количество лотов
         }
         }
   
//--------------------------------------------------------------- 6 --
   // Торговые критерии
   Sar_1=iSAR(NULL, 0, 0.02, 0.2, 1);           // Sar_1
   Sar_0=iSAR(NULL, 0, 0.02, 0.2, 0);           // Sar_0
 
   if (Sar_0 > Price && Sar_1 < Price)          // если Sar меняет положение
     {
      Opn_B=true;                               // Критерий откр. Buy             
     }  
   if (Sar_0 < Price && Sar_1 > Price)          // если Sar меняет положение
     {                                          
      Opn_S=true;                               // Критерий откр. Sell                                   
     }   
//--------------------------------------------------------------- 7 --
  
     {
      if (Opn_B==true)         
        {                                       // критерий откр. Buy
         RefreshRates();                        // Обновление данных
         SL=(20+Ask-Bid)*Bid;                 // Вычисление SL откр.
         TP=20*Bid;                           // Вычисление TP откр.
         Alert("Попытка открыть Buy. Ожидание ответа..");
         Ticket=OrderSend(Symbol(),OP_BUY,Lot,Ask,0,SL,TP);//Открытие Buy                         
        }
        if (Fun_Error(GetLastError())==1)      // Обработка ошибок
                                   
         return;                                // Выход из start()
        
        
      if (Opn_S==true)                          // критерий откр. Sell
      
        {                                       // критерий откр. Sell
         RefreshRates();                        // Обновление данных
         SL=(20+Ask-Bid)*Ask;                 // Вычисление SL откр.
         TP=20*Ask;                           // Вычисление TP откр.
         Alert("Попытка открыть Sell. Ожидание ответа..");
         Ticket=OrderSend(Symbol(),OP_SELL,Lot,Bid,0,SL,TP);//Открытие Sel
         
         return;                                // Выход из start()
        }
        
      if (Fun_Error(GetLastError())==1)      // Обработка ошибок
                      
         return;                                // Выход из start()
        
     }
//--------------------------------------------------------------- 9 --
   return;                                      // Выход из start()
  }
//-------------------------------------------------------------- 10 --
int Fun_Error(int Error)                        // Ф-ия обработ ошибок
  {
   switch(Error)
     {                                          // Преодолимые ошибки            
      case  4: Alert("Торговый сервер занят. Пробуем ещё раз..");
         Sleep(3000);                           // Простое решение
         return(1);                             // Выход из функции
      case 135:Alert("Цена изменилась. Пробуем ещё раз..");
         RefreshRates();                        // Обновим данные
         return(1);                             // Выход из функции
      case 136:Alert("Нет цен. Ждём новый тик..");
         while(RefreshRates()==false)           // До нового тика
            Sleep(1);                           // Задержка в цикле
         return(1);                             // Выход из функции
      case 137:Alert("Брокер занят. Пробуем ещё раз..");
         Sleep(3000);                           // Простое решение
         return(1);                             // Выход из функции
      case 146:Alert("Подсистема торговли занята. Пробуем ещё..");
         Sleep(500);                            // Простое решение
         return(1);                             // Выход из функции
         // Критические ошибки
      case  2: Alert("Общая ошибка.");
         return(0);                             // Выход из функции
      case  5: Alert("Старая версия терминала.");
         Work=false;                            // Больше не работать
         return(0);                             // Выход из функции
      case 64: Alert("Счет заблокирован.");
         Work=false;                            // Больше не работать
         return(0);                             // Выход из функции
      case 133:Alert("Торговля запрещена.");
         return(0);                             // Выход из функции
      case 134:Alert("Недостаточно денег для совершения операции.");
         return(0);                             // Выход из функции
      default: Alert("Возникла ошибка ",Error); // Другие варианты   
         return(0);                             // Выход из функции
     }
  }
//-------------------------------------------------------------- 11 --

Элементарный советник, должен открывать позиции при смене положения индикатора Parabolic SAR относительно графика цены, работает на M15, SL и TP всегда постоянны для открываемой позиции.

Советник сравнивает положения индикатора текущей и предыдущей свечек.

При компиляции ошибок и замечаний нет, при тестировании во вкладках "результаты" "график" "отчет" пусто, в журнале вот это:"картинка"

За кодингом 2ой день, никогда этим раньше не занимался, книгу по mql прочитал, в инете свою проблему поискал. Я в тупике, помогите, если не трудно


 

T.H.C.,попробуй так




Файлы:
0000001_1.mq4  3 kb
 
Techno:

T.H.C.,попробуй так




Спасибо огромное,не ожидал такой оперативности, да и таких изменений в коде.

Насоветуй пжалста еще книг по программированию, кроме базовой mql

 
T.H.C.:

Спасибо огромное,не ожидал такой оперативности, да и таких изменений в коде.

Насоветуй пжалста еще книг по программированию, кроме базовой mql

я только базовую читал, полное понимание со временем приходит, просто больше практики написания надо
Причина обращения: