Domande dai principianti MQL4 MT4 MetaTrader 4 - pagina 61

 
Renat Akhtyamov:
Spero che ci sia un valore assegnato alla variabile Percent in OnInit()?
La variabile Percent è definita dall'utente. Ho abbandonato OnInit().
 
Michail_David:
La mia variabile Percent è definita dall'utente. OnInit() l'ho abbandonato.
Se Lots=0, il tester non aprirà nulla
 
Renat Akhtyamov:
se Lots=0, niente sarà aperto dal tester
Ho un sacco di calcoli relativi a Percent. Il tester calcola il numero di lotti, ma nessun trade.

 Margin_Percent=AccountFreeMargin()*Percent/100; 

Lots=Margin_Percent/MarketInfo(Symbol(),MODE_MARGINREQUIRED);

      Lots_Volume=(MathFloor(Lots)+MarketInfo(Symbol(),MODE_LOTSTEP));

if(Lots>Lots_Volume)
        {
         Lots=Lots_Volume;
        }
      else if(Lots<Lots_Volume)
         Lots=MathFloor(Lots);
      Print("Количество лотов : ",Lots);
      return;
 
Michail_David:
Ho un sacco di calcoli relativi a Percent. Il tester calcola il numero di lotti, ma non ci sono scambi.

E ancora, dove nel codice è impostato Percent

e cosa fa il seguente comando print("Lots : ",Lots); ?

 
Renat Akhtyamov:

Tuttavia, dove si trova nel codice Percent

e cosa fa il seguente comando print("Number of lots : ",Lots); ?

#property link      ""
#property version   "1.00"
#property strict
//--- input parameters
input int      Percent=50;
input int      Fast_EMA_Period=12;
input int      Slow_EMA_Period=25;
input int      Signal_Period=9;
input double   Step_PSAR=0.02;
input double   Maximum_PSAR=0.2;
input int      MAGICNUMBER=413;
static datetime New_Time;// Время текущего бара
double Margin_Percent;  //Используемые средства для открытия ордеров
double Lots;//Определение общего количества лотов
double Lots_Volume;
double MacdCurrent;//Параметры MACD основной линии текущего бара
double MacdPrevious1;//Параметры MACD основной линии предыдущего бара
double MacdPrevious2;//Параметры MACD основной линии со смещением на 2 бара
double StopLoss;//Параметры Трейлинг стоп по параметрам ParabolicSAR текущего бара
double Previous_StopLoss;//Параметры СтопЛосс по параметрам ParabolicSAR предыдущего бара
double CurrentPSAR;//Параметры СтопЛосс по параметрам ParabolicSAR предыдущего бара
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {

   bool New_Bar=false;                    // Флаг нового бара
   int ticket,total,cnt;
//---------------------------------------------------------------------------
   New_Time=TimeCurrent();
   if(Time[0]==New_Time) // Сравниваем время
      New_Bar=true;      // Поймался новый бар
   else if(New_Bar==false) // Если бар не новый..
La quinta riga specifica Percent. Il registro stampa: "Quantità di lotti: 90.0100000001". Forse dovremmo aggiungere NormalizeDouble()?
 
Michail_David:
Nella quinta linea Percent è impostato. Il registro mostra: "Il numero di lotti è 90.0100000001". Forse dovremmo aggiungere NormalizeDouble()?

Non c'è niente di sbagliato nel lotto.

Cerca un errore nella logica di apertura dell'ordine.

In questi casi, di solito imposto una condizione esplicita che aprirà l'ordine

 
Renat Akhtyamov:

Non c'è niente di sbagliato nel lotto.

Cerca un errore nella logica di apertura dell'ordine.

Di solito in questi casi imposto una condizione esplicita che l'ordine si apra

Per favore, ci dia un esempio con una condizione esplicita. Se ho capito bene, ci dovrebbe essere una condizione nel ciclo da aprire. È corretto?
 
Michail_David:
Per favore, fate un esempio con una condizione esplicita. Se ho capito bene, ci dovrebbe essere una condizione nel ciclo per l'apertura. Giusto?
Date un comando per aprire un ordine all'inizio del codice, subito dopo il calcolo del lotto e assicuratevi che il tester funzioni correttamente. Poi si può rimettere tutto a posto.
 
Renat Akhtyamov:
Date un comando per aprire un ordine all'inizio del codice, subito dopo aver calcolato il lotto, e assicuratevi che il tester funzioni correttamente. Poi si può rimettere tutto a posto.
Grazie. Trovato l'errore. Ho avuto il ritorno; dopo il calcolo dei lotti. Ecco perché i lotti non si sono aperti
 
Michail_David:
La quinta riga specifica Percent. Il registro visualizza: "Numero di lotti 90.0100000001". Forse dovremmo aggiungere NormalizeDouble()?
Dovresti. E non solo i lotti, ma tutti gli altri valori che vengono passati al server. I lotti sono anche utili per controllare il minimo e il massimo consentito nel valore del conto, anche sul cambio di passo, ci sono stati casi in cui il lotto può essere cambiato in incrementi di 0,03, quindi 90,01 non funzionerà, almeno sovrascritto.
Motivazione: