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

 

Boris.45:

Yedelkin: А что возвращает Time_H1[1][0]?

      Я этот элемент массива не использую, т.к. в дальнейшем сразу перехожу к алгоритму поиска фракталов на последних 5-ти барах.  А  Time_H1[1][0] - это время открытия нулевого бара, где параметры этого бара еще не сформированы.  Может быть я и ошибаюсь, но на собственном опыте я убедился, что использование параметров нулевого бара для формирования таймсерий приводит к их искажению 

Хорошо, уточню вопрос:

Если "Time_H1[nomer_instr][i]=Time_buf[i];" и "Time_H1[1][1]=2011.01.03 11:00:00", то что возвращает Time_buf[0]?
 

 

Скиньте пожалуйста ссылку на закрытие определенной (конкретной) позиции.


То есть при определенном моменте, когда выполняются условия на закрытие позиции, допустим BUY, советник (в данный момент) закрывает любую открытую позицию BUY. А сейчас столкнулся с проблемой, когда необходимо закрыть определенную (конкретную) позицию BUY.

К примеру при открытии позиции BUY можно присвоить ему определенное обозначение, а при закрытии указать в условие его "существование".
 
Lester: Скиньте пожалуйста ссылку на закрытие определенной (конкретной) позиции.То есть при определенном моменте, когда выполняются условия на закрытие позиции, допустим BUY, советник (в данный момент) закрывает любую открытую позицию BUY. А сейчас столкнулся с проблемой, когда необходимо закрыть определенную (конкретную) позицию BUY.

К примеру при открытии позиции BUY можно присвоить ему определенное обозначение, а при закрытии указать в условие его "существование".
А каким способом закрываете "любую открытую позицию"? По сути, каждой открытой позиции соответствует один единственный символ. Соответственно, при закрытии надо использовать наименование этого символа, а не присваивать открытой позиции "определённое обозначение".
 
Вот пример. Первый БАЙ на покупку во флэте, второй бай на закрытие СЕЛЛ во флете и на покупку но уже в тренде. Закрытие же БАЙ происходит и для всех открытых БАЙ - что не есть хорошо, поскольку второе закрытие относится только лишь  к тренду.
if(Buy_Condition_1 || Buy_Condition_2)
     { 
       if(Buy_Condition_3 && Buy_Condition_10)
        {
         // есть ли в данный момент открытая позиция на покупку?
         if(Buy_opened)
           {
            Alert("Позиция на покупку имеется");
            return;    // не добавлять к открытой позиции на покупку
           }        
         mrequest.action = TRADE_ACTION_DEAL;    // немедленное исполнение
         mrequest.symbol = _Symbol;              // символ
         mrequest.magic = EA_Magic;              // Magic Number
         mrequest.volume = Lot;                  // количество лотов для торговли
         mrequest.type = ORDER_TYPE_BUY;         // ордер на покупку
         mrequest.type_filling = ORDER_FILLING_FOK;   // тип исполнения ордера - все или ничего

         //--- отсылаем ордер
         OrderSend(mrequest,mresult);         
                 
         // анализируем код возврата торгового сервера
         if(mresult.retcode==10009 || mresult.retcode==10008) //запрос выполнен или ордер успешно помещен
           {
            Alert("Buy успешно помещен, тикет ордера #:",mresult.order,"!!");
           }
         else
           {
            Alert("Запрос на установку ордера Buy не выполнен - код ошибки:",GetLastError());
            return;
           }
         }
      }
 if(Buy_Condition_4 || Buy_Condition_5)
     { 
       if(Buy_Condition_6)
        {
         // есть ли в данный момент открытая позиция на покупку?
  if(Buy_opened)
      {
      Alert("Позиция на покупку во Флэте есть");
      return;    // не добавлять к открытой позиции на покупку
      }   
    if(PositionSelect(_Symbol)==true) // есть открытая позиция
      {
       if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
       {
        Alert("Закрываю ордер Sell флэт!!!");                  
                                  
         mrequest.action = TRADE_ACTION_DEAL;// немедленное исполнение
         mrequest.symbol = _Symbol;         // символ
         mrequest.magic = EA_Magic;        // Magic Number
         mrequest.volume = Lot;           // количество лотов для торговли
         mrequest.type = ORDER_TYPE_BUY; // ордер на продажу      
         mrequest.type_filling = ORDER_FILLING_FOK;  // тип исполнения ордера - все или ничего
        //--- отсылаем ордер
         OrderSend(mrequest,mresult);
         // анализируем код возврата торгового сервера
         if(mresult.retcode==10009 || mresult.retcode==10008) //запрос выполнен или ордер успешно помещен
           {
          Alert("тикет закрытия Sell флэт #:",mresult.order,"!!");
           }
         else
           {
          Alert("Запрос на установку ордера закрытия Sell флэт не выполнен - код ошибки:",GetLastError());
          return;
           }
         }
       }
   
         mrequest.action = TRADE_ACTION_DEAL;    // немедленное исполнение
         mrequest.symbol = _Symbol;              // символ
         mrequest.magic = EA_Magic;              // Magic Number
         mrequest.volume = Lot;                  // количество лотов для торговли
         mrequest.type = ORDER_TYPE_BUY;         // ордер на покупку
         mrequest.type_filling = ORDER_FILLING_FOK;   // тип исполнения ордера - все или ничего

         //--- отсылаем ордер
         OrderSend(mrequest,mresult);         
                 
         // анализируем код возврата торгового сервера
         if(mresult.retcode==10009 || mresult.retcode==10008) //запрос выполнен или ордер успешно помещен
           {
            Alert("Buy на тренд успешно помещен, тикет ордера #:",mresult.order,"!!");
           }
         else
           {
            Alert("Запрос на установку ордера Buy тренд не выполнен - код ошибки:",GetLastError());
            return;
           }         
         }
      }
....
...
if(Buy_Close_1 || Buy_Close_2)
     {
      if(Buy_Close_3)
        {
         if(PositionSelect(_Symbol)==true) // есть открытая позиция
           {
            if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
                {
           Alert("Закрываю ордер BUY!!!");                  
                                  
         mrequest.action = TRADE_ACTION_DEAL; // немедленное исполнение
         mrequest.symbol = _Symbol;           // символ
         mrequest.magic = EA_Magic;           // Magic Number
         mrequest.volume = Lot;               // количество лотов для торговли
         mrequest.type = ORDER_TYPE_SELL; // ордер на продажу      
         mrequest.type_filling = ORDER_FILLING_FOK; // тип исполнения ордера - все или ничего
         //--- отсылаем ордер
         OrderSend(mrequest,mresult);
         // анализируем код возврата торгового сервера
         if(mresult.retcode==10009 || mresult.retcode==10008) //запрос выполнен или ордер успешно помещен
           {            
            Alert("тикет закрытия Buy #:",mresult.order,"!!");
           }
         else
           {
            Alert("Запрос на установку ордера закрытия Buy не выполнен - код ошибки:",GetLastError());
            return;
           }
        }
      }
    }
  }

if(Buy_Close_4 || Buy_Close_5)
        {
         if(PositionSelect(_Symbol)==true) // есть открытая позиция
           {
            if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
                {
           Alert("Закрываю ордер BUY!!!");                  
                                  
         mrequest.action = TRADE_ACTION_DEAL; // немедленное исполнение
         mrequest.symbol = _Symbol;           // символ
         mrequest.magic = EA_Magic;           // Magic Number
         mrequest.volume = Lot;               // количество лотов для торговли
         mrequest.type = ORDER_TYPE_SELL; // ордер на продажу      
         mrequest.type_filling = ORDER_FILLING_FOK; // тип исполнения ордера - все или ничего
         //--- отсылаем ордер
         OrderSend(mrequest,mresult);
         // анализируем код возврата торгового сервера
         if(mresult.retcode==10009 || mresult.retcode==10008) //запрос выполнен или ордер успешно помещен
           {            
            Alert("тикет закрытия Buy #:",mresult.order,"!!");
           }
         else
           {
            Alert("Запрос на установку ордера закрытия Buy не выполнен - код ошибки:",GetLastError());
            return;
           }
        }
      }
    }
 
Lester: Вот пример. Первый БАЙ на покупку во флэте, второй бай на закрытие СЕЛЛ во флете и на покупку но уже в тренде. Закрытие же БАЙ происходит и для всех открытых БАЙ - что не есть хорошо, поскольку второе закрытие относится только лишь  к тренду.
Так Вы на одном символе сибираетесь закрывать разные "позиции"?
 
Yedelkin:
Так Вы на одном символе сибираетесь закрывать разные "позиции"?

Не совсем.

Если открыт buy-флет, то не смогу закрыть buy-тренд. И наоборот.

То есть на одном символе закрывать определенные позиции - либо флет (при условии открытия флет), либо тренд (при условии открытия тренд).

 
Lester:Не совсем. Если открыт buy-флет, то не смогу закрыть buy-тренд. И наоборот.

То есть на одном символе закрывать определенные позиции - либо флет (при условии открытия флет), либо тренд (при условии открытия тренд).

Понятно.  К сожалению, из-за терминологических неточностей был введён в заблуждение и далее помочь не могу. В MQL5 на каждом символе может существовавать только одна позиция. Двух позиций типа "buy-флет и buy-тренд" одновременно на одном символе быть не может. Вы же, по существу, ставите вопрос не об mql5-позициях, а об отслеживании выставленных Вами торговых ордеров. Посмотрите поиском по форуму: года три назад была статья про "виртуальные ордера" для MT5. Да и позднее такая тема неоднократно поднималась на форуме.
 
Yedelkin:

Хорошо, уточню вопрос:

Если "Time_H1[nomer_instr][i]=Time_buf[i];" и "Time_H1[1][1]=2011.01.03 11:00:00", то что возвращает Time_buf[0]?

            Попробую объяснить идею, которую  я пытаюсь реализовать в советнике.

Есть стандартные функции CopyTime(), CopyOpen(), CopyHigh() и т.д., использующие соответствующие массивы Time_buf[], Open_buf[], High_buf[] и т.д.

С помощью этих функций мы можем получить исторические данные по разным таймфреймам и разным валютам. При этом Time_buf[0]- это время открытия нулевого бара,

High_buf[0] - максимальное значение цены конкретной валюты на нулевом баре на момент последнего пришедшего  тика.

        Затем для каждого таймфрейма я создаю двумерные массивы для каждого параметра Time, Open и т.д. Тогда для таймфрейма Н1 у меня появляются массивы

Time_H1[i][j], Open_H1[i][j], High_H1[i][j] и т.д.  В этих массивах каждая строка предназначена для исторических данных конкретной валюты. Таким образом,

с помощью цикла по номерам валют for( i=1; i<=nomer_instr; i++ )  я осуществляю перезапись исторических данных Time_buf[j], High_buf[j] и т.д. в соответствующие строки массивов

Time_H1[i][j], High_H1[i][j] и т.д.

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

моменту времени его окончания будут равны параметрам 1-го бара.  У меня советник работает не на тиках, а на барах. Так вот я обнаружил, что при работе советника на барах

значения High_buf[0], Low_buf[0] не являются историческими значениями на момент закрытия нулевого бара, а это какие-о случайные величины. Поэтому если включать

параметры нулевого бара в  историческую последовательность, то вся историческая последовательность параметра искажается. Поэтому я и не использую параметры нулевого бара.

        Извините, что так длинно получилось.


 

Boris.45:

Yedelkin: Хорошо, уточню вопрос: Если "Time_H1[nomer_instr][i]=Time_buf[i];" и "Time_H1[1][1]=2011.01.03 11:00:00", то что возвращает Time_buf[0]?

 Попробую объяснить идею, которую  я пытаюсь реализовать в советнике.

Ну я же не про идею спрашивал :)

Boris.45 При этом Time_buf[0]- это время открытия нулевого бара,

Вот я и спрашиваю, какое значение возращает упомянутый Вами элемент массива?

 

Подскажите пжл !

Как  перекрасить  фон валютных пар в обзоре рынка

или  вообще убрать цвет

Заранее спс ! 

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