Написание советника на [ MQL4 ]

Поэтому, если бы мне нужен был советник в MQL4, который брал цену открытия, и когда текущая цена была на 10 пипсов ниже цены открытия, он размещал ордер на покупку, а когда она была на 10 пипсов выше цены открытия, он продавал. Только один ордер за раз, и открытие менялось ежедневно.

Вопрос 1. Как это могло работать без остановки?

Вопрос 2. Будет ли это прибыльно?

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


person Rob    schedule 26.03.2016    source источник
comment
Вы пытались расширить свой код MQL4 в указанном ниже направлении, Роб?   -  person user3666197    schedule 05.04.2016
comment
какие свежие новости в этом MQL4-проекте?   -  person user3666197    schedule 18.05.2016
comment
Может быть интересно прочитать на [ quantitative-finance ] ››› stackoverflow. com/ и на [ MQL4 ] ››› stackoverflow .com/   -  person user3666197    schedule 09.06.2016


Ответы (1)


A1: самая простая часть...

Выполнение кода типа MQL4 Expert Advisor в принципе может выполняться без остановки, при условии, что механизм исполнения, MetaTrader Terminal 4, работает в безостановочном режиме. Несмотря на то, что еще остаются выходные, доступные для выполнения задач обслуживания и обслуживания, код EA сам по себе может работать бесконечно долго, полностью сохраняя состояние с помощью автоматической самозащиты безопасного повторного запуска с повторным входом ( OnInit(){...} + OnDeinit(){...} ).

#property copyright "Copyright © 1987-2016 [MS]"
#property link      "nowhere.no"
#property version   "0.00"
#property strict

extern   int   minDist2XTO         = 10;     // A minimum Distance To XTO
         bool  aGlobalMUTEX_LOCKED = False;  // LOCK "only one order at a time"

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int      OnInit()
  {   // on-launch intialisation tasks go here:
         return( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void     OnDeinit( const int reason )
  {   // pre-exit sanitisation tasks go here:
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void     OnTick()
  {   // MAIN: this is being executed upon each anFxMarketEVENT's arrival

      // GoLONG();

      // GoSHORT();

  }
//+------------------------------------------------------------------+
//| Tester function                                                  |
//+------------------------------------------------------------------+
double   OnTester()
  {   // back-testing utility calculation functions go here:
         double  retVal = 0.0;
         return( retVal );
  }
//+------------------------------------------------------------------+
void     GoLONG()
  {   // SELF-CONTROLLABLE ( might even get concurrently run in parallel to GoSHORT on dual resources )
      // -------------------------------------------------------------------------------------------------------
         static bool       aNewBarEVENT   = FALSE;
         static int        aLastBAR       = EMPTY,
                           aCurrBAR       = EMPTY;
         static double     GoLONG_LEVEL   = EMPTY;
      // -------------------------------------------------------------------------------------------------------
      // TEST A STATE-SHIFT

         RefreshRates();

                           aCurrBAR = iBars(_Symbol, PERIOD_D1 );
         if (  aLastBAR != aCurrBAR )
         {     aLastBAR  = aCurrBAR;   // .SET
               aNewBarEVENT = TRUE;    // .FLAG
            // ----------------------- // .RESET in-BAR-registers
               GoLONG_LEVEL =  NormalizeDouble( iOpen( _Symbol, PERIOD_D1, 0 )
                                              - minDist2XTO * _Point
                                                );
            // ----------------------
         }
         else
         {     aNewBarEVENT = FALSE;    // !FLAG
         }
         if ( !aGlobalMUTEX_LOCKED
            && Ask <= GoLONG_LEVEL
            )
         {  
         // XTO ...                     // .XTO
            if ( success ) aGlobalMUTEX_LOCK = True;
         }
    }
//+------------------------------------------------------------------+
void     GoSHORT()
  {   // SELF-CONTROLLABLE ( might even get concurrently run in parallel to GoLONG on dual resources )
         ...
         ..
         .
   } 

A2:

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

Без количественных данных из адекватного диапазона TimeDOMAIN сезонных неравномерностей рынка вопрос не может иметь разумно обоснованного количественного ответа (за исключением просто мнения) .

Это выходит далеко за рамки формата вопросов/ответов StackOverflow, но, в принципе, предполагает обратное тестирование (с поддержкой встроенного механизма постобработки double OnTester(){...}) и предварительное тестирование (с поддержкой демонстрационных форвардные прогоны счета) используются в количественном моделировании до того, как какая-либо реальная торговая стратегия когда-либо подвергнется какому-либо реальному рыночному риску.

person user3666197    schedule 26.03.2016