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

 
Vladon:

Идея Ваша, но не код. Код писал программист а не Вы, Вы писали ТЗ. 

Представьте себе - пользователи Windows потребуют открытый код - не абсурд?  

 

 

Насколько я понимаю, код на котором пишут эксперты, принадлежит компании MetaQuotes , или лично вам?  

 

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

 
Vladon:

ААА :-=) так исходники все таки есть перед защитой? что Вы тогда еще хотите? Вам же сказали - дллки открытый код защищенного эксперта никто не даст, и я бы не дал. А если бы было требование   требовать после выполнения, исходник своего продукта. 

Я бы отказался от задания.  

 

Что Вам тогда еще нужно? Есть исходник перед защитой значит это тоже самое что советник с защитой. они должны работать идиентично.  

В процессе работы эксперта, делались доработки в, добавлялись различные функции и т.п., вот уже с этими доработками открытого кода нет.   
 
ComplexFX:
В процессе работы эксперта, делались доработки в, добавлялись различные функции и т.п., вот уже с этими доработками открытого кода нет.   

тогда думаю правда на Вашей стороне.

 

 Насколько я понимаю, код на котором пишут эксперты, принадлежит компании MetaQuotes , или лично вам?  

Если я пишу код - то лично мне. Компании MetaQuotes принадлежит язык программирования. 

все по честному.  

 
Подскажите, как в эксперте закрыть открытый ордер? Как закрывается позиция по стоплоссу или тейкпрофиту понятно. А как сделать это вручную?
 
pogeon:
Подскажите, как в эксперте закрыть открытый ордер? Как закрывается позиция по стоплоссу или тейкпрофиту понятно. А как сделать это вручную?
 В mql5 открытая позиция закрывается противоположнонаправленными ордерами, суммарный объём которых равен объёму закрываемой позиции.
 
progeon:
Подскажите, как в эксперте закрыть открытый ордер? Как закрывается позиция по стоплоссу или тейкпрофиту понятно. А как сделать это вручную?

Или использовать класс CTrade там есть функция 

trade.PositionClose(_Symbol);

 как-то так

https://www.mql5.com/ru/docs/standardlibrary/tradeclasses/ctrade/ctradepositionclose 

Документация по MQL5: Стандартная библиотека / Торговые классы / CTrade / PositionClose
Документация по MQL5: Стандартная библиотека / Торговые классы / CTrade / PositionClose
  • www.mql5.com
Стандартная библиотека / Торговые классы / CTrade / PositionClose - Документация по MQL5
 
Yedelkin:  В mql5 открытая позиция закрывается противоположнонаправленными ордерами, суммарный объём которых равен объёму закрываемой позиции

lazarev-d-m: Или использовать класс CTrade там есть функция

Метод PositionClose() класса CTrade также закрывает позицию противоположнонаправленными ордерами.

 

    Уважаемые программисты, подскажите пожалуйста метод решения или причину появления следующей ситуации. Работаю на MQL5 недавно, опыта пока не хватает.

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

Написал следующий кусок программы.

       int nomer_instr;  // это порядковый номер валюты в массиве имен валют

      string Name_symbol[6] = { "AUDUSD","EURUSD", "GBPUSD", "USDCAD", "USDCHF", "USDJPY" } ;  //текстовый массив названий валют: в [0]-"AUDUSD", 1-"EURUSD", 2-"GBPUSD", 3-"USDCAD" и т.д.

    double  Close_buf[], Open_buf[], High_buf[], Low_buf[];  //базовые массивы для параметров свеч

    datetime Time_buf[];  //базовый массив времени открытия баров

    double  Close_H1[6][150], Open_H1[6][150], High_H1[6][150], Low_H1[6][150];  // массивы для параметров свеч мультивалютного эксперта для таймфрейма Н1

                                                                                                                          // число строк в массиве соответствует числу анализируемых валют

    datetime Time_H1[6][150];  // массив времени открытия баров

   double  Close_H4[6][150], Open_H4[6][150], High_H4[6][150], Low_H4[6][150];  // массивы для параметров свеч мультивалютного эксперта для таймфрейма Н4

                                                                                                                          // число строк в массиве соответствует числу анализируемых валют 

   datetime Time_H4[6][150];  // массив времени открытия баров



int OnInit()

  {

  }

void OnDeinit(const int reason)
  {
//---
    ArrayFree(Time_buf);
     ArrayFree(Close_buf);
     ArrayFree(Open_buf);

     ArrayFree(High_buf);

    ArrayFree(Low_buf);

}


   void OnTick()

      {

        //------------------------------------------------------------------------------

         здесь кусок пограммы по определению момента появления времени открытия нового бара    Nev_Time[0]

        и ведется учет порядкового номера обрабатываемого бара в процессе тестирования или торговли  Schetchik_svech

      //------------------------------------------------------------------------------------------------------------------------

               ArraySetAsSeries(Close_buf, true);  //устанавливаем индексацию для массива close_array как в таймсерии
               ArraySetAsSeries(Open_buf, true);   //устанавливаем индексацию для массива open_array как в таймсерии
               ArraySetAsSeries(High_buf, true);   //устанавливаем индексацию для массива high_array как в таймсерии
               ArraySetAsSeries(Low_buf, true);   //устанавливаем индексацию для массива low_array как в таймсерии

               ArraySetAsSeries(Time_buf, true);   //устанавливаем индексацию для массива time_array как в таймсерии


   for( nomer_instr=0; nomer_instr<=5; nomer_instr++ )
    {                 
       
        
          //========================================================================
          CopyTime( Name_symbol[nomer_instr], PERIOD_H1,0,160,Time_buf); // копируем в буфер исторические данные time для каждого бара
          CopyClose( Name_symbol[nomer_instr], PERIOD_H1,0,160,Close_buf); // копируем в буфер исторические данные close для каждого бара
          CopyOpen( Name_symbol[nomer_instr], PERIOD_H1,0,160,Open_buf); // копируем в буфер исторические данные open для каждого бара
          CopyHigh( Name_symbol[nomer_instr], PERIOD_H1,0,160,High_buf); // копируем в буфер исторические данные high для каждого бара
          CopyLow( Name_symbol[nomer_instr], PERIOD_H1,0,160,Low_buf); // копируем в буфер исторические данные low для каждого бара
         //========================================================================
        
              for( i=1; i<=145; i++ )
                {
                   Time_H1[nomer_instr][i]=Time_buf[i];
                   Close_H1[nomer_instr][i]=Close_buf[i];       
                   Open_H1[nomer_instr][i]=Open_buf[i];
                   High_H1[nomer_instr][i]=High_buf[i];
                   Low_H1[nomer_instr][i]=Low_buf[i];
                }
               
         //======================================================================================
        //  проверка сдвига во времени сформированных данных парамнтров свеч часового таймфрейма      
      
            if( Schetchik_svech > 8  && Schetchik_svech < 15 )
               {
                 if( nomer_instr == 5 )
                    {
                       Alert("================================================");
                       Alert(" номер бара = ",Schetchik_svech,",  время открытия бара Nev_Time[0]=",Nev_Time[0]);
                       Alert(" номер инструмента: nomer_instr=",nomer_instr,",  инструмент: Name_symbol[nomer_instr]=",Name_symbol[nomer_instr]);
                       Alert("---------------------------------------------------------");
                       for( i=1; i<=5; i++ )
                         {
                           Alert( "i=",i,",   Time_H1[nomer_instr][i]=",Time_H1[nomer_instr][i],",    Close_H1[nomer_instr][i]=",Close_H1[nomer_instr][i]);
                         }
                    }
               }
        //======================================================================================
      

     } // конец цикла по используемым валютам на таймфрейме Н1


     //##############################################

       здесь аналогичный кусок пограммы для таймфрейма Н4

     //############################################


 } //  конец функции OnTick()


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

          -   Для случая Н1, когда делается вывод параметров баров для  графика, на котором стоит советник имеем  разницу во времени между открытием нулевого и первого баров в один час.

            Например, советник стоит на графике EURUSD, а момент открытия нулевого бара Nev_Time[0]=2011.01.03 13:00:00, тогда время открытия 1-го бара  Time_H1[1][1]=2011.01.03 12:00:00

            Результат, соответствует здравому смыслу.

         -   Теперь советник стоит на этом же графике, а анализируем данные любой другой валюты, например, AUDUSD.  Имеем:

               момент открытия нулевого бара Nev_Time[0]=2011.01.03 13:00:00, тогда время открытия 1-го бара  Time_H1[1][1]=2011.01.03 11:00:00

             Этот результат уже просто неприемлем,  но причин появления этого эффекта я в статьях не нашел.

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

            Спасибо за внимание.


 

       

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 
Boris.45:              момент открытия нулевого бара Nev_Time[0]=2011.01.03 13:00:00, тогда время открытия 1-го бара  Time_H1[1][1]=2011.01.03 11:00:00
А что возвращает Time_H1[1][0]?
 
Yedelkin:

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

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

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