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

 
pusheax:
Хренотень
Ну где-то 50/50
 
Alexey Solomin:

Прошу прощения, не указал платформу, у меня mql4, "POSITION_PROFIT" нет в справке, может быть это "OrderProfit" ?

Картинку, пожалуйста, вставляйте так: Форум: как вставить картинку. - ок)
Да, это "OrderProfit"!
 

Здравствуйте ! в кодобазе нашел один код и вопрос к нему, на который ответ не могу отыскать ,

начало кода советника  

#define MAGIC_NUMBER 12937

#define DEV 20
#define RISK 0.0
#define BASELOT 0.1
#define SL 100
#define TP 700
#define DELTA 30

почему  макроподставка (#define) использована ведь эти переменные недоступны в настройках

и как сделать так чтоб их можно было проверить с оптимизацией

https://www.mql5.com/ru/code/viewcode/244/53730/grr-al__3.mq5  

 
Alexander Antoshkin:

Здравствуйте ! в кодобазе нашел один код и вопрос к нему, на который ответ не могу отыскать ,

начало кода советника  

почему  макроподставка (#define) использована ведь эти переменные недоступны в настройках

и как сделать так чтоб их можно было проверить с оптимизацией

https://www.mql5.com/ru/code/viewcode/244/53730/grr-al__3.mq5  

Сделайте их input переменными.
 
Tapochun:
Сделайте их input переменными.

в смысле

 #input MAGIC_NUMBER 12937; так

input DEV 20;
input RISK 0.0;
input BASELOT 0.1;
input SL 100;
input TP 700;
input DELTA 30;
или input uint MAGIC_NUMBER 12937;
 
Alexander Antoshkin:
input uint MAGIC_NUMBER=12937;
 
Karputov Vladimir:
так я делал  компелятор выдавал ошибку , ладно пока спасибо буду у компа , продолжу 
 
Alexander Antoshkin:

в смысле

 #input MAGIC_NUMBER 12937; так

Модификатор input, поставленный перед типом переменной, означает, что переменная будет доступна в списке входных параметров эксперта.

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

А вообще, существует документация. В компиляторе выделите слово input и нажмите F1. Там есть примеры. 

 

Написал первый корявый советник на скользящих. Скажите почему он не отправляет ордера?

//+------------------------------------------------------------------+
//|                                                 Первый робот.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"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
input int TakeProfit = 1500;
input int StopLoss = 500;
int muving_handle_1;
int muving_handle_2;
double ma1[];
double ma2[];

int OnInit()
  {
 int MA_1_PERIOD = 20;
 int MA_2_PERIOD = 10;
 muving_handle_1 = iMA(_Symbol,_Period,MA_1_PERIOD,0,MODE_SMA,PRICE_CLOSE);
 muving_handle_2 = iMA(_Symbol,_Period,MA_2_PERIOD,0,MODE_SMA,PRICE_CLOSE);
 return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
  int signal; 
 
 if(CopyBuffer(muving_handle_1,0,0,3,ma1)<0)
 { 
      Alert("Ошибка копирования буферов индикатора MA 10 - номер ошибки:",GetLastError()); 
      return; 
 } 
 
if(CopyBuffer(muving_handle_1,0,0,3,ma2)<0)
 { 
      Alert("Ошибка копирования буферов индикатора MA 20 - номер ошибки:",GetLastError()); 
      return; 
 } 

signal=CheckTradeSignal(); 
PositionOpen(signal);
   
  }
//+------------------------------------------------------------------+
  
int CheckTradeSignal() 
  { 
   int TradeSignal=0; 
   if((ma2[2]>ma1[2]) && (ma2[1]<ma1[1])) 
      TradeSignal=1; // Buy signal   
   if((ma2[2]<ma1[2]) && (ma2[1]>ma1[1])) 
      TradeSignal=2; // Sell signal 
   return TradeSignal; 
  } 
  
  bool PositionOpen(int tradeSignal) 
  { 
   int InpTP=500,InpSL=150; 

   if(tradeSignal>0) // Signal 
     { 
      //--- 1. Создать запрос 
      MqlTradeRequest Trade_reqst={0};            // Инициализация структуры торгового запроса 
      Trade_reqst.action=TRADE_ACTION_DEAL;       // Тип: немедленное совершение сделки 
      Trade_reqst.symbol=_Symbol;                 // Инструмент: текущий 
      Trade_reqst.volume=1;                    // Лотаж 
      Trade_reqst.type_filling=ORDER_FILLING_FOK; // Политика исполнения: Fill Or Kill 
      double sl,tp; 
      if(tradeSignal==1) // Buy signal   
        { 
         Trade_reqst.type=ORDER_TYPE_BUY;            // Тип ордера: на покупку 
         sl=SymbolInfoDouble(_Symbol,SYMBOL_BID)-InpSL*_Point; 
         tp=SymbolInfoDouble(_Symbol,SYMBOL_BID)+InpTP*_Point; 
        } 
      else 
        { 
         Trade_reqst.type=ORDER_TYPE_SELL;           // Тип ордера: на продажу 
         sl=SymbolInfoDouble(_Symbol,SYMBOL_ASK)+InpSL*_Point; 
         tp=SymbolInfoDouble(_Symbol,SYMBOL_ASK)-InpTP*_Point; 
        } 
      Trade_reqst.sl=sl; 
      Trade_reqst.tp=tp; 
      //--- 2. Отправить торговый приказ 
      MqlTradeResult Trade_reslt_m={0};             // Инициализация структуры результата торгового запроса 
      if(!OrderSend(Trade_reqst,Trade_reslt_m))     // Отправка торгового запроса на сервер 
         return false; 
      else 
         return true; 
     } 
   else             // No signal 
     { 
      return false; 
     } 
  }  
Автоматический трейдинг и тестирование торговых стратегий
Автоматический трейдинг и тестирование торговых стратегий
  • www.mql5.com
MQL5: язык торговых стратегий для MetaTrader 5, позволяет писать собственные торговые роботы, технические индикаторы, скрипты и библиотеки функций
 
Скажите почему в отладке советника я могу проверять значения переменных и функций, находящихся только в OneInit()? Допустим я хочу проверить условие обработки бара или тика в OneTick() как это сделать?
Причина обращения: