Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 453

 
pusheax:
Mentira
Bueno, es más o menos 50/50.
 
Alexey Solomin:

Perdón, no especifiqué la plataforma, tengo mql4,"POSITION_PROFIT" no está en la ayuda, ¿podría ser " OrderProfit"?

(Por favor, inserte una imagen de esta manera:foro: cómo insertar una imagen. - OK)
Sí, es " OrderProfit".
 

Hola, he encontrado un código en kodobase y una pregunta a la que no encuentro respuesta,

al principio del código

#define  MAGIC_NUMBER 12937

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

¿Por qué utilizo la expansión de macros (#define)? Estas variables no están disponibles en la configuración

y cómo hacer posible su comprobación con la optimización

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

 
Alexander Antoshkin:

Hola, he encontrado un código en kodobase y una pregunta a la que no encuentro respuesta,

al principio del código

¿Por qué utilizo la expansión de macros (#define)? Estas variables no están disponibles en la configuración

y cómo hacer posible su comprobación con la optimización

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

Haz que sean variables de entrada.
 
Tapochun:
Haz que sean variables de entrada.

en el sentido de

#inputNÚMERO_MÁGICO 12937; así

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:
Eso es lo que he hecho, el compilador me ha dado un error, vale gracias por ahora, volveré a mi ordenador, seguiré.
 
Alexander Antoshkin:

en el sentido de

#inputNÚMERO_MÁGICO 12937; así

El modificador de entrada, colocado delante del tipo de variable, significa que la variable estará disponible en la lista de parámetros de entrada del Asesor Experto.

En el caso concreto del magik, es mejor anteponer el modificador sinput. Significa que la variable también estará disponible en la lista de parámetros de entrada, participará en la optimización pero su valor no podrá ser optimizado.

En general, hay documentación. En el compilador, seleccione la entrada de palabras y pulse F1. Ahí hay ejemplos.

 

Escribió mi primer EA torcido en los resbalones. ¿Dime por qué no envía órdenes?

//+------------------------------------------------------------------+
//|                                                 Первый робот.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, позволяет писать собственные торговые роботы, технические индикаторы, скрипты и библиотеки функций
 
¿Dime por qué en la depuración de EA puedo comprobar los valores de las variables y funciones que sólo están en OneInit()? Digamos que quiero comprobar una condición de procesamiento de barras o ticks en OneTick() ¿cómo puedo hacerlo?