Помогите разобраться с советниками. - страница 2

 
Karputov Vladimir:

Зачем отключать? Нужно правильную политику указать советнику. Если торгуете через класс CTrade, то будет так:

1. Так сказал брокер.

2. Советник сгенерирован платформой, в самом советнике 100 строк кода, половина из которых описание.

3. Нашел руками в стандартных модулях данный параметр, попробовал разные поставить - эффекта нет.  

 
К какому серверу (название) подключаетесь, на каком символе проверяете и приложите, пожалуйста код советника.
 
//+------------------------------------------------------------------+
//|                                                         Тест.mq5 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Include                                                          |
//+------------------------------------------------------------------+
#include <Expert\Expert.mqh>
//--- available signals
#include <Expert\Signal\SignalBearsPower.mqh>
//--- available trailing
#include <Expert\Trailing\TrailingNone.mqh>
//--- available money management
#include <Expert\Money\MoneyFixedRisk.mqh>
//+------------------------------------------------------------------+
//| Inputs                                                           |
//+------------------------------------------------------------------+
//--- inputs for expert
input string Expert_Title                 ="Test"; // Document name
ulong        Expert_MagicNumber           =26682;  // 
bool         Expert_EveryTick             =false;  // 
//--- inputs for main signal
input int    Signal_ThresholdOpen         =10;     // Signal threshold value to open [0...100]
input int    Signal_ThresholdClose        =10;     // Signal threshold value to close [0...100]
input double Signal_PriceLevel            =0.0;    // Price level to execute a deal
input double Signal_StopLevel             =50.0;   // Stop Loss level (in points)
input double Signal_TakeLevel             =50.0;   // Take Profit level (in points)
input int    Signal_Expiration            =4;      // Expiration of pending orders (in bars)
input int    Signal_BearsPower_PeriodBears=13;     // Bears Power(13) Period of calculation
input double Signal_BearsPower_Weight     =1.0;    // Bears Power(13) Weight [0...1.0]
//--- inputs for money
input double Money_FixRisk_Percent        =50.0;   // Risk percentage
//+------------------------------------------------------------------+
//| Global expert object                                             |
//+------------------------------------------------------------------+
CExpert ExtExpert;
//+------------------------------------------------------------------+
//| Initialization function of the expert                            |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- Initializing expert
if(!ExtExpert.Init(Symbol(),Period(),Expert_EveryTick,Expert_MagicNumber))
     {
      //--- failed
      printf(__FUNCTION__+": error initializing expert");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- Creating signal
   CExpertSignal *signal=new CExpertSignal;
   if(signal==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating signal");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//---
   ExtExpert.InitSignal(signal);
   signal.ThresholdOpen(Signal_ThresholdOpen);
   signal.ThresholdClose(Signal_ThresholdClose);
   signal.PriceLevel(Signal_PriceLevel);
   signal.StopLevel(Signal_StopLevel);
   signal.TakeLevel(Signal_TakeLevel);
   signal.Expiration(Signal_Expiration);
//--- Creating filter CSignalBearsPower
CSignalBearsPower *filter0=new CSignalBearsPower;
if(filter0==NULL)
  {
   //--- failed
   printf(__FUNCTION__+": error creating filter0");
   ExtExpert.Deinit();
   return(INIT_FAILED);
  }
signal.AddFilter(filter0);
//--- Set filter parameters
filter0.PeriodBears(Signal_BearsPower_PeriodBears);
filter0.Weight(Signal_BearsPower_Weight);
//--- Creation of trailing object
  CTrailingNone *trailing=new CTrailingNone;
   if(trailing==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating trailing");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- Add trailing to expert (will be deleted automatically))
   if(!ExtExpert.InitTrailing(trailing))
     {
      //--- failed
      printf(__FUNCTION__+": error initializing trailing");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- Set trailing parameters
//--- Creation of money object
CMoneyFixedRisk *money=new CMoneyFixedRisk;
   if(money==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating money");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- Add money to expert (will be deleted automatically))
   if(!ExtExpert.InitMoney(money))
     {
      //--- failed
      printf(__FUNCTION__+": error initializing money");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- Set money parameters
money.Percent(Money_FixRisk_Percent);
//--- Check all trading objects parameters
   if(!ExtExpert.ValidationSettings())
     {
      //--- failed
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- Tuning of all necessary indicators
   if(!ExtExpert.InitIndicators())
     {
      //--- failed
      printf(__FUNCTION__+": error initializing indicators");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- ok
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Deinitialization function of the expert                          |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   ExtExpert.Deinit();
  }
//+------------------------------------------------------------------+
//| "Tick" event handler function                                    |
//+------------------------------------------------------------------+
void OnTick()
  {
   ExtExpert.OnTick();
  }
//+------------------------------------------------------------------+
//| "Trade" event handler function                                   |
//+------------------------------------------------------------------+
void OnTrade()
  {
   ExtExpert.OnTrade();
  }
//+------------------------------------------------------------------+
//| "Timer" event handler function                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
   ExtExpert.OnTimer();
  }
//+------------------------------------------------------------------+
Код советника. Сервер: BCS5-Real, Символ - любой из доступных.
Автоматический трейдинг и тестирование торговых стратегий
Автоматический трейдинг и тестирование торговых стратегий
  • www.mql5.com
MQL5: язык торговых стратегий для MetaTrader 5, позволяет писать собственные торговые роботы, технические индикаторы, скрипты и библиотеки функций
 
Cheremnyakov:

Например: почему советник не торгует? Причем любой, самописный - точно работал, буквально месяц назад, а теперь ни на демо-счете не торгует, ни в тесте, просто не открывает ни одной сделки. Советник сгенерированный платформой мт5 - точно так же, не торгует, ни в тесте, ни на демо счете, от слова никак.

Месяц назад советники работали на этом-же брокере, вы ничего не меняли, и внезапно всё сломалось? Или месяц назад вы сменили брокера и у нового почему-то ничего не работает?  Это разные вещи.

Для начала подключитесь к MT5 серверу MetaQuotes-Demo, сделайте там демо аккаунт и проверьте советника в тестере. 99% что он будет работать без проблем, а значит ваш брокер не хочет чтоб вы торговали советником и просто мешает вам. 

Ответ брокера о проверке filling type какой-то мутный. Это поле обязательное.
Хотя, на всякий случай чтоб проверить, найдите любой советник для mt5 где сделки совершаются без классов, а напрямую из OrderSend() со структурой MqlTradeRequest. В этой структуре есть поле type_filling. Непосредственно перед вызовом OrderSend() очистите значение MqlTradeRequest.type_filling = 0, видимо саппорт брокера об этом говорил.
Если не поможет, попробуйте добавить код MqlTradeRequest.type_filling = ORDER_FILLING_FOK перед вызовом OrderSend(), потом ещё раз MqlTradeRequest.type_filling = ORDER_FILLING_IOC, потом ещё раз MqlTradeRequest.type_filling = ORDER_FILLING_RETURN. (Все три допустимые значения)
Если советник так и не заработает, то ваш брокер не хочет чтоб вы торговали советником и просто мешает вам. 

 

Запустите, пожалуйста, этот скрипт:

//+------------------------------------------------------------------+
//|                                                 Info_FILLING.mq5 |
//|                        Copyright 2015, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property description "Варианты исполнения ордера по объему"
#include<Trade\Trade.mqh>
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
// Все/Ничего     SYMBOL_FILLING_FOK   1
// Все/Частично   SYMBOL_FILLING_IOC   2
// Вернуть        Идентификатор отсутствует
   Print("Все/Ничего, SYMBOL_FILLING_FOK: ",IsFillingTypeAllowed(Symbol(),SYMBOL_FILLING_FOK));
   Print("Все/Частично, SYMBOL_FILLING_IOC: ",IsFillingTypeAllowed(Symbol(),SYMBOL_FILLING_IOC));
   Print("Вернуть, Идентификатор отсутствует: ",IsFillingTypeAllowed(Symbol(),NULL));

   CTrade oTrade;
   switch((int)SymbolInfoInteger(Symbol(),SYMBOL_FILLING_MODE))
     {
      case SYMBOL_FILLING_FOK:
         Print("ORDER_FILLING_FOK");
         break;
      case SYMBOL_FILLING_IOC:
         Print("ORDER_FILLING_IOC");
         break;
      default:
         Print("ORDER_FILLING_RETURN");
     }
  }
//+------------------------------------------------------------------+ 
//| проверяет разрешенность указанного режима заполнения             | 
//+------------------------------------------------------------------+ 
bool IsFillingTypeAllowed(string symbol,int fill_type)
  {
//--- получим значение свойства, описывающего режим заполнения 
   int filling=(int)SymbolInfoInteger(symbol,SYMBOL_FILLING_MODE);
//--- вернем true, если режим fill_type разрешен 
   return((filling&fill_type)==fill_type);
  }
//+------------------------------------------------------------------+

На биржевых инструментах должно быть так:

2016.05.23 08:11:19.069 Info_FILLING (RTS-6.16,M1)      Все/Ничего, SYMBOL_FILLING_FOK: true
2016.05.23 08:11:19.069 Info_FILLING (RTS-6.16,M1)      Все/Частично, SYMBOL_FILLING_IOC: true
2016.05.23 08:11:19.069 Info_FILLING (RTS-6.16,M1)      Вернуть, Идентификатор отсутствует: true
2016.05.23 08:11:19.069 Info_FILLING (RTS-6.16,M1)      ORDER_FILLING_RETURN
Файлы:
 
Karputov Vladimir:

Запустите, пожалуйста, этот скрипт:

На биржевых инструментах должно быть так:

Вот что вернул этот скрипт.

2016.05.23 19:30:29.890 script (GBPUSD,H1) ORDER_FILLING_RETURN
2016.05.23 19:30:29.890 script (GBPUSD,H1) Вернуть, Идентификатор отсутствует: true
2016.05.23 19:30:29.890 script (GBPUSD,H1) Все/Частично, SYMBOL_FILLING_IOC: false
2016.05.23 19:30:29.890 script (GBPUSD,H1) Все/Ничего, SYMBOL_FILLING_FOK: false

 
Dr.Trader:

Месяц назад советники работали на этом-же брокере, вы ничего не меняли, и внезапно всё сломалось? Или месяц назад вы сменили брокера и у нового почему-то ничего не работает?  Это разные вещи.

Для начала подключитесь к MT5 серверу MetaQuotes-Demo, сделайте там демо аккаунт и проверьте советника в тестере. 99% что он будет работать без проблем, а значит ваш брокер не хочет чтоб вы торговали советником и просто мешает вам. 

Ответ брокера о проверке filling type какой-то мутный. Это поле обязательное.
Хотя, на всякий случай чтоб проверить, найдите любой советник для mt5 где сделки совершаются без классов, а напрямую из OrderSend() со структурой MqlTradeRequest. В этой структуре есть поле type_filling. Непосредственно перед вызовом OrderSend() очистите значение MqlTradeRequest.type_filling = 0, видимо саппорт брокера об этом говорил.
Если не поможет, попробуйте добавить код MqlTradeRequest.type_filling = ORDER_FILLING_FOK перед вызовом OrderSend(), потом ещё раз MqlTradeRequest.type_filling = ORDER_FILLING_IOC, потом ещё раз MqlTradeRequest.type_filling = ORDER_FILLING_RETURN. (Все три допустимые значения)
Если советник так и не заработает, то ваш брокер не хочет чтоб вы торговали советником и просто мешает вам. 

Ну месяц-два назад... я ничего не менял, потому что некогда было заниматься тестом советника, а тут решил своего потестить, да платформой пособирать, а советники не работают.

И да, у другого брокера все работает без проблем. 

 
Cheremnyakov:
Вот что вернул этот скрипт.

2016.05.23 19:30:29.890 script (GBPUSD,H1) ORDER_FILLING_RETURN
2016.05.23 19:30:29.890 script (GBPUSD,H1) Вернуть, Идентификатор отсутствует: true
2016.05.23 19:30:29.890 script (GBPUSD,H1) Все/Частично, SYMBOL_FILLING_IOC: false
2016.05.23 19:30:29.890 script (GBPUSD,H1) Все/Ничего, SYMBOL_FILLING_FOK: false

А если на биржевом символе? (На фьючерсе RST6, например).
 

Этот запустите, если выдаст 3, то у вас FOK,

//+------------------------------------------------------------------+
//|                                                 Info_FILLING.mq5 |
//|                        Copyright 2015, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {

   Print((int)SymbolInfoInteger(Symbol(),SYMBOL_FILLING_MODE));
  }
//+------------------------------------------------------------------+
 
Частенько так: при любом вмешательстве в сов на реале МТ5 - он перестает торговать, пока не начнешь все сначала - перезагрузка, десять 9 ставить в настройках терминала, опять перезагружать... и еще что-то уже забыл...))
Причина обращения: