Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 453

 
pusheax:
Stronzate
Beh, è circa 50/50.
 
Alexey Solomin:

Scusa, non ho specificato la piattaforma, ho mql4,"POSITION_PROFIT" non è nell'aiuto, potrebbe essere " OrderProfit" ?

(Si prega di inserire un'immagine in questo modo:forum: come inserire un'immagine. - OK)
Sì, è " OrderProfit"!
 

Ho trovato un codice in kodobase e una domanda a cui non riesco a trovare la risposta,

all'inizio del codice

#define  MAGIC_NUMBER 12937

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

Perché uso l'espansione macro (#define)? Queste variabili non sono disponibili nelle impostazioni

e come rendere possibile il loro controllo con l'ottimizzazione

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

 
Alexander Antoshkin:

Ho trovato un codice in kodobase e una domanda ad esso che non riesco a trovare la risposta,

all'inizio del codice

Perché uso l'espansione macro (#define)? Queste variabili non sono disponibili nelle impostazioni

e come rendere possibile il loro controllo con l'ottimizzazione

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

Rendeteli variabili di input.
 
Tapochun:
Rendeteli variabili di input.

nel senso di

#inputMAGIC_NUMBER 12937; quindi

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:
È quello che ho fatto, il compilatore mi ha dato un errore, ok grazie per ora, tornerò al mio computer, continuerò.
 
Alexander Antoshkin:

nel senso di

#inputMAGIC_NUMBER 12937; quindi

Il modificatore di input, posto davanti al tipo di variabile, significa che la variabile sarà disponibile nella lista dei parametri di input dell'Expert Advisor.

Nel caso specifico del magik, è meglio mettere il modificatore sinput davanti ad esso. Significa che la variabile sarà anche disponibile nella lista dei parametri di input, parteciperà all'ottimizzazione ma il suo valore non può essere ottimizzato.

In generale, c'è una documentazione. Nel compilatore selezionate l'input di parole e premete F1. Ci sono degli esempi.

 

Ho scritto il mio primo EA storto sugli slittamenti. Dimmi perché non invia ordini?

//+------------------------------------------------------------------+
//|                                                 Первый робот.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, позволяет писать собственные торговые роботы, технические индикаторы, скрипты и библиотеки функций
 
Ditemi perché nel debug EA posso controllare i valori delle variabili e delle funzioni che sono solo in OneInit()? Diciamo che voglio controllare una condizione di elaborazione della barra o del tick in OneTick() come posso farlo?
Motivazione: