Обсуждение реализации советников. - страница 5

 
Ivan_Invanov:
Вот, изучил синтаксис языка. Учусь на примере конструктора. Вижу вызов класса. Дальше логика для меня оборвалась. Что мне нужно делать? Искать статьи? Лучше стандартными средставами реализовывать или писать свои классы?
Нахожу статью по разъеснению конструктора. Пояснение работы блока сигналов например. И пару сухих фраз вот, типа да вот этот параметр фиксировано задан. А поменять, ничего не написано. Вот у меня такого рода вопросы возникают, если мне не нужен параметр, я могу его просто удалить? он в инициализации есть , там тоже удалить? Какеи я могу добавить еще параметры и как? Если бы я видел пример изменения, смог бы разобраться. Я считаю, чисто проблема справочных материалов. Недостаточно подробно, недостаточно примеров , недостаточно обобщений для системного восприятия. Может быть я очень тупой, не знаю. Мне интересно, только для меня так? Или может быть нужно улучшать учебные пособия? Я готов лично платить деньги например.
 
Ivan_Invanov:

MQL5 - Это ресурс, где самое подробное описание документации. Огромный пласт информации в статьях, на форуме и в КодоБазе. Нигде в мире Вы не найдете, где бы так подробно всё разжёвывали.

Нужно только желание чтобы разобраться во всём. 

 
Vladimir Karputov:

MQL5 - Это ресурс, где самое подробное описание документации. Огромный пласт информации в статьях, на форуме и в КодоБазе. Нигде в мире Вы не найдете, где бы так подробно всё разжёвывали.

Нужно только желание чтобы разобраться во всём. 

Вот конкретный вопрос. Есть CExpertSignal в нем есть AddFilter, в справке ничего не написано про функции AddFilter. Там вот есть например спред. Как мне написать, если я не вижу пример. Что мне конкретно сделать нужно? Вот сейчас попробую значит догадаться.

CExpert ExtExpert;
ExtExpert.InitSignal(signal);
signal.AddFilter(filter0);
filer0.Spread(20);

Компиляция без ошибок. Я правильно написал? Теперь сделки не будут заключаться, если спред более 20? И как вообще поступать в подобном случае? Что читать может?

 
Ivan_Invanov:

Вот конкретный вопрос. Есть CExpertSignal в нем есть AddFilter, в справке ничего не написано про функции AddFilter. Там вот есть например спред. Как мне написать, если я не вижу пример. Что мне конкретно сделать нужно? Вот сейчас попробую значит догадаться.

Компиляция без ошибок. Я правильно написал? Теперь сделки не будут заключаться, если спред более 20? И как вообще поступать в подобном случае? Что читать может?

Читать: Мастер MQL4/MQL5

Задание:

  • создать простой советник при помощи Мастера
  • в редакторе MetaEditor открыть полученный код
После этого задать вопросы.
Мастер MQL4/MQL5 - Справка по MetaEditor
Мастер MQL4/MQL5 - Справка по MetaEditor
  • www.metatrader5.com
Благодаря Мастеру MQL4/MQL5, трейдер может создать советника, не обладая знаниями в области программирования. Все что нужно сделать — это выбрать торговые сигналы, которые будет использовать советник, алгоритм мани-менеджмента и трейлинг-стопа. Код советника будет сгенерирован автоматически на основе выбранных параметров. Помимо этого, Мастер...
 
Ivan_Invanov:

Вот конкретный вопрос. Есть CExpertSignal в нем есть AddFilter, в справке ничего не написано про функции AddFilter. Там вот есть например спред. Как мне написать, если я не вижу пример. Что мне конкретно сделать нужно? Вот сейчас попробую значит догадаться.

Компиляция без ошибок. Я правильно написал? Теперь сделки не будут заключаться, если спред более 20? И как вообще поступать в подобном случае? Что читать может?

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

 
//+------------------------------------------------------------------+
//|                                                            1.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Include                                                          |
//+------------------------------------------------------------------+
#include <Expert\Expert.mqh>
//--- available signals
#include <Expert\Signal\SignalMA.mqh>
//--- available trailing
#include <Expert\Trailing\TrailingNone.mqh>
//--- available money management
#include <Expert\Money\MoneyFixedRisk.mqh>
//+------------------------------------------------------------------+
//| Inputs                                                           |
//+------------------------------------------------------------------+
//--- inputs for expert
input string             Expert_Title         ="1";         // Document name
ulong                    Expert_MagicNumber   =15825;       //
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_MA_PeriodMA   =12;          // Moving Average(12,0,...) Period of averaging
input int                Signal_MA_Shift      =0;           // Moving Average(12,0,...) Time shift
input ENUM_MA_METHOD     Signal_MA_Method     =MODE_SMA;    // Moving Average(12,0,...) Method of averaging
input ENUM_APPLIED_PRICE Signal_MA_Applied    =PRICE_CLOSE; // Moving Average(12,0,...) Prices series
input double             Signal_MA_Weight     =1.0;         // Moving Average(12,0,...) Weight [0...1.0]
//--- inputs for money
input double             Money_FixRisk_Percent=10.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 CSignalMA
   CSignalMA *filter0=new CSignalMA;
   if(filter0==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating filter0");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
   signal.AddFilter(filter0);
//--- Set filter parameters
   filter0.PeriodMA(Signal_MA_PeriodMA);
   filter0.Shift(Signal_MA_Shift);
   filter0.Method(Signal_MA_Method);
   filter0.Applied(Signal_MA_Applied);
   filter0.Weight(Signal_MA_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();
  }
//+------------------------------------------------------------------+
Здравствуйте. Подскажите пожалуйста, какой сигнал на вход в рынок у этого советника, и где он находится в коде?
Совершение сделок - Торговые операции - Справка по MetaTrader 5
Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 
Сигнал на вход в рынок находится в "фильтре", так?
 
А почему разные объявления классов? почему иногда в стек память, а иногда нет ? Со звёздочкой и без? 
 
мне нужен спред фильтр и понять бы что вообще делается тут. Правильно ли я понял, что тут стратегия такая, что если цена больше на какую то цифру от средней, то заключается сделка?
 
Ivan_Invanov:
Здравствуйте. Подскажите пожалуйста, какой сигнал на вход в рынок у этого советника, и где он находится в коде?

Для решения таких вопросов надо использовать отладчик.

При приходе тика вызывается функция OnTick(). В ней и проходит вся обработка, если надо - выявляются сигналы, если необходимо, производятся торговые действия.

Как видишь, в этой функции вызывается функция ExtExpert.OnTick(), и все происходит внутри нее, в коде больше ничего нет.

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