Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 349

 

È possibile passare parametri di input dinamici all'indicatore tramite iCustom? Quando provo a farlo, si apre una nuova finestra dell'indicatore, per ogni nuovo parametro di input dinamico.

   if(NewBarCur())BulsPeriod++;
   double sep_window=iCustom(Symbol(),PERIOD_CURRENT,"Bulls",BulsPeriod,0,0);
 
E questa domanda, c'è un modo per sapere se, per esempio, è rimasta 1 barra o 3 minuti sul grafico di prova?
 
Artyom Trishkin:

In questo thread voglio iniziare ad aiutare coloro che vogliono veramente capire e imparare la programmazione nel nuovo MQL4 e vogliono passare facilmente a MQL5 - i linguaggi sono molto simili.

Questo sarà un buon posto per discutere di problemi, algoritmi della loro soluzione e qualsiasi altra domanda riguardante la programmazione MT.

Spero che altri membri esperti del nostro forum si uniscano a noi e che il thread sia interessante per tutti.


Artyom Trishkin:

In questo ramo, vorrei iniziare ad aiutare coloro che vogliono veramente capire e imparare la programmazione nel nuovo MQL4 e vogliono passare facilmente a MQL5 - i linguaggi sono molto simili.

Questo sarà un buon posto per discutere di problemi, algoritmi e qualsiasi altra domanda riguardante la programmazione MT.

Spero che altri membri esperti del nostro forum si uniscano a noi per risolvere i problemi e che il thread sia di interesse per tutti.


Artyom Trishkin:

In questo ramo, vorrei iniziare ad aiutare coloro che vogliono veramente capire e imparare la programmazione nel nuovo MQL4 e vogliono passare facilmente a MQL5 - i linguaggi sono molto simili.

Questo sarà un buon posto per discutere di problemi, algoritmi e qualsiasi altra domanda riguardante la programmazione MT.

Spero che altri membri esperti del nostro forum si uniscano a noi e che questo argomento sia interessante per tutti.


Artyom Trishkin:

In questo ramo, vorrei iniziare ad aiutare coloro che vogliono veramente capire e imparare la programmazione nel nuovo MQL4 e vogliono passare facilmente a MQL5 - i linguaggi sono molto simili.

Questo sarà un buon posto per discutere di problemi, algoritmi e qualsiasi altra domanda riguardante la programmazione MT.

Spero che altri membri esperti del nostro forum si uniscano a noi e che questo argomento sia interessante per tutti.


Artyom Trishkin:

In questo ramo, vorrei iniziare ad aiutare coloro che vogliono veramente capire e imparare la programmazione nel nuovo MQL4 e vogliono passare facilmente a MQL5 - i linguaggi sono molto simili.

Questo sarà un buon posto per discutere di compiti, algoritmi della loro soluzione e qualsiasi altra domanda, in un modo o nell'altro, relativa alla programmazione MT.

Spero che altri membri esperti del nostro forum si uniscano a noi e che questo argomento sia interessante per tutti.


Artyom

Artyom Trishkin:

Voglio iniziare questo capitolo per aiutare coloro che vogliono veramente capire e imparare la programmazione nel nuovo MQL4 e vogliono passare facilmente a MQL5 - i linguaggi sono molto simili.

Questo è un posto per discutere di compiti, algoritmi per risolverli e qualsiasi altra domanda che sia legata alla programmazione MT in un modo o nell'altro.

Spero che altri membri esperti del nostro forum si uniscano a noi per risolvere i problemi e che il thread sia di interesse per tutti.


Aiutatemi, ho aggiunto la funzione trailing stop al mio EA, l'ho testato e mi dà due errori. - Non ho idea di come sistemarli. Tuttavia i trade sono chiusi secondo la vecchia strategia dopo che il prezzo ha toccato il limite superiore del canale e quello inferiore, rispettivamente. Credo che qualcosa debba essere cambiato anche qui. - Richiamo ai ragazzi dell'esercito del dnr.

#property copyright "Copyright 2017, MetaQuotes Software Corp.

#proprietà link "https://www.mql5.com"

#proprietà versione "1.00"

#proprietà rigorosa


//---------------------------------------------------------

extern double Lots = 0,01;

extern int TakeProfit = 600;

extern int StopLoss = 25;

extern int Magic = 0001;

extern int Slippage = 3;

extern int TralType = 0; // 0-SAR, 1-ATR, 2-HMA.

extern double SAR_Step = 0.02;

extern double SAR_Max = 0,2;

extern int ATR_Period = 14;

extern double ATR_K = 2.0;

extern inttern HMA_Period = 16;

extern intern HMA_Method = 3;

extern inttern HMA_Shift = 0;

datetime LBT;

//---------------------------------------------------------

extern string TMA = "Parametri dell'indicatore TMA";

extern string TimeFrame = "time frame corrente";

extern int HalfLength = 56;

extern int Price = "PRICE_CLOSE;

extern double ATRMultiplier = 2.0;

extern inttern ATRPeriod = 100;

extern bool Interpolate = true;

//---------------------------------------------------------

doppio PriceHigh, PriceLow, SL, TP;

biglietto int;


//+------------------------------------------------------------------+

//| Funzione di inizializzazione dell'esperto |

//+------------------------------------------------------------------+

int OnInit()

{

se (cifre == 3 || cifre == 5)

{

TakeProfit *= 10;

StopLoss *= 10;

Scivolamento *= 10;

}

return(INIT_SUCCEED);

}

//+------------------------------------------------------------------+

//| Funzione di deinizializzazione dell'esperto |

//+------------------------------------------------------------------+

void OnDeinit(const int reason)

{


}

//+------------------------------------------------------------------+

//| funzione tick esperto |

//+------------------------------------------------------------------+

void OnTick()

{

PriceHigh = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 1, 0);

PriceLow = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 2, 0);

if(CountSell() == 0 && Bid >= PriceHigh)

{

ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "TMA robot", Magic, 0, Red);

se (biglietto > 0)

{

SL = NormalizeDouble(Bid + StopLoss*Point, Digits);

TP = NormalizeDouble(Bid - TakeProfit*Point, Digits);

se (OrderSelect(ticket, SELECT_BY_TICKET))

se (!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))

Stampa("Errore di modifica dell' ordine!)

}

}

if (CountBuy() == 0 && Ask <= PriceLow)

{

ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "TMA robot", Magic, 0, Blue);

se (biglietto > 0)

{

TP = NormalizeDouble(Ask + TakeProfit*Point, Digits);

SL = NormalizeDouble(Ask - StopLoss*Point, Digits);

se (OrderSelect(ticket, SELECT_BY_TICKET))

if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))

Stampa("Errore nella modifica dell'ordine di acquisto!)

} else Print("Error opening the Buy order");

}

//+------------------------------------------------------------------+

//| Funzione di inizializzazione dell'esperto |

//+------------------------------------------------------------------+

int init()

{

//--------


//--------

ritorno (0);

}

//+------------------------------------------------------------------+

//| funzione tick esperto |

//+------------------------------------------------------------------+

void OnTick()

{

PriceHigh = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 1, 0);

PriceLow = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 2, 0);

if(CountSell() == 0 && Bid >= PriceHigh)

{

ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "TMA robot", Magic, 0, Red);

se (biglietto > 0)

{

SL = NormalizeDouble(Bid + StopLoss*Point, Digits);

TP = NormalizeDouble(Bid - TakeProfit*Point, Digits);

se (OrderSelect(ticket, SELECT_BY_TICKET))

se (!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))

Stampa("Errore nella modifica dell'ordine di vendita!)

} else Print("Errore nell'apertura dell'ordine di vendita!)

}

if (CountBuy() == 0 && Ask <= PriceLow)

{

ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "TMA robot", Magic, 0, Blue);

se (biglietto > 0)

{

TP = NormalizeDouble(Ask + TakeProfit*Point, Digits);

SL = NormalizeDouble(Ask - StopLoss*Point, Digits);

se (OrderSelect(ticket, SELECT_BY_TICKET))

if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))

Stampa("Errore nella modifica dell'ordine di acquisto!)

} else Print("Error opening the Buy order");

}

se (Ask <= PriceLow && CountSell() > 0)

{

per (int i = OrdiniTotali() -1; i>0; i--)

{

se (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

se (OrderMagicNumber() == Magic && OrderType() == OP_SELL)

if (!OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Black))

Stampa("Errore di chiusura dell'ordine di vendita!)

}

}

}

se (Bid >= PriceHigh && CountBuy() > 0)

{

per (int i = OrdiniTotali() -1; i>0; i--)

{

se (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

se (OrderMagicNumber() == Magic && OrderType() == OP_BUY)

if(!OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Black))

Stampa("Errore di acquisto OrderClose!)

}

}

}

}

//+------------------------------------------------------------------+

int CountSell()

{

int count = 0;

per (int trade = OrdersTotal()-1; trade>=0; trade--)

{

if(OrderSelect(trade, SELECT_BY_POS, MODE_TRADES))

{

if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_SELL)

count++;

}

}

return(count);

}//+------------------------------------------------------------------+

int CountBuy()

{

int count = 0;

per (int trade = OrdersTotal()-1; trade>=0; trade--)

{

if(OrderSelect(trade, SELECT_BY_POS, MODE_TRADES))

{

if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY)

count++;

}

}

return(count);

}

//+------------------------------------------------------------------+

//| Funzione di deinizializzazione dell'esperto |

//+------------------------------------------------------------------+

int deinit()

{

//+-------


//+-------

ritorno (0)

}

//+------------------------------------------------------------------+

//| funzione di inizio esperto |

//+------------------------------------------------------------------+

int Inizio()

{

//-----

bool error = fals;

se (LBT!=Time[0]) {

se (OrdiniTotali()!=0) {

per (int i=0; i<OrdersTotal(); i++) {

if (OrderSelect(i,SELECT_BY_POS)&&OrderSymbol()==Symbol()&&OrderType()<2) {

doppio SL = OrderStopLoss();

se OrderType()==0) {

interruttore (TralType) {

caso 0: SL = iSAR(NULL,0,SAR_Step,SAR_Max,0);

pausa;

caso 1: SL = High[1] - iATR(NULL,0,ATR,Period,1)*ATR_K;

pausa;

caso 2: SL = iCustom(NULL,0, "VininI_HMAsound&amp",HMA_Period,HMA_Method,3,HMA_Shift, fals,fals,",1,0,0);

pausa;

}

se (SL<OrderStopLoss())

SL = OrderStopLoss();

}

se (OrderType()==1) {

interruttore (TralType) {

caso 0: SL = iSAR(NULL,0,SAR_Step,SAR_Max,0);

pausa;

caso 1: SL = Low[1] + iATR(NULL,0,ATR,Period,1)*ATR_K;

pausa;

caso 2: SL = iCustom(NULL,0, "VininI_HMAsound&amp",HMA_Period,HMA_Method,3,HMA_Shift, fals,fals,",1,0,0);

pausa;

}

se (SL>OrderStopLoss())

SL = OrderStopLoss();

}

se (SL!=OrderStopLoss()) {

if(!OrderModify(OrderTicket(),OrderOpenPrice(),SL,OrderTakeProfit(),0))

errore = vero;

}

}

}

}

se (!errore)

LBT = Tempo[0];

}

ritorno (0);

}

//+------------------------------------------------------------------+

 
vkravtzov:

Impara come inserire il codice!!!


Imparare a inserire il codice!!!


Impara come inserire il codice!!!


Impara come inserire il codice!!!


Impara come inserire il codice!!!


Impara come inserire il codice!!!


Impara come inserire il codice!!!


Impara come inserire il codice!!!


Impara come inserire il codice!!!


Imparare a inserire il codice!!!

 
vkravtzov: Aiutatemi a capire, ho aggiunto la funzione trailing stop a Expert Advisor, l'ho testata e mi dà due errori. - Mi sono rotto il cervello e non riesco a capire come aggiustarlo. Tuttavia i trade sono chiusi secondo la vecchia strategia dopo che il prezzo ha toccato il limite superiore del canale e quello inferiore, rispettivamente. Credo che qualcosa debba essere cambiato anche qui. - Richiamo ai ragazzi dell'esercito del dnr.

Ha deciso di aiutare. Ma ho delle domande per l'autore - avete queste due funzioni di inizializzazione - cosa fanno?

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
   if (Digits == 3 || Digits == 5)
   {
   TakeProfit *= 10;
   StopLoss   *= 10;
   Slippage   *= 10;
   }
   return(INIT_SUCCEEDED);
}


//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//--------
//--------
    return (0);
    }

Ci sono duefunzioni OnTick().... E una terza funzione int Start() - tutte vengono eseguite con l'arrivo del tick. E in quale ordine il terminale li farà partire?

Errore: manca una parentesi graffa di chiusura alla fine della funzione OnTick()

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
  PriceHigh = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 1, 0);
  PriceLow  = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 2, 0);
  if(CountSell() == 0 && Bid >= PriceHigh)
  {
     ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "TMA robot", Magic, 0, Red);
     if (ticket > 0)
     {
        SL = NormalizeDouble(Bid + StopLoss*Point, Digits);
        TP = NormalizeDouble(Bid - TakeProfit*Point, Digits);
        if (OrderSelect(ticket, SELECT_BY_TICKET))
           if (!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))
                Print("Ошибка модификации ордера на продажу!");
     }
  }
  if (CountBuy() == 0 && Ask <= PriceLow)
  {
     ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "TMA robot", Magic, 0, Blue);
     if (ticket > 0)
     {
        TP = NormalizeDouble(Ask + TakeProfit*Point, Digits);
        SL = NormalizeDouble(Ask - StopLoss*Point, Digits);
        if (OrderSelect(ticket, SELECT_BY_TICKET))
            if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))
                Print("Ошибка модификации ордера на покупку!");
     }   else Print("Ошибка открытия ордера на покупку");
   }
}    // Эту скобку добавил !!!!!!!!!!!!!!!!!!!!!!!!!

Ora il compilatore ha rilevato 8 errori. Ho cancellato .

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//--------
//--------
    return (0);
    }


//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
{
//+-------
//+-------
   return (0);
   }

Ora ci sono 7 errori.

Ho sostituito if(OrderType()==0) con una parentesi dopo if: if(OrderType()==0) - si sono verificati 8 errori

iATR(NULL,0,ATR,Period,1) - abbiamo bisogno di iATR(NULL,0,ATR_Period,1) - si sono verificati 2 errori

bool error = fals; abbiamo bisogno di bool error = false; - gli errori sono diventati 3

Dove possiamo trovare l'indicatore VininI_HMAsound&amp? Quali parametri ci sono? = l'errore sarebbe ancora 1

E perché fare una domanda in tre posti?

 

Aiuto scaricare e installare EAs libero e segnali su mt4 non come neemogu trovare download vide solo come installare, ma nessun download. Dimmi dove guardare

 
vovik36 Степанов:

Aiuto scaricare e installare EAs libero e segnali su mt4 non come neemogu trovare download vide solo come installare, ma nessun download. Si prega di consigliare dove cercare.

Prima laureati, poi venuti.

 
Artyom Trishkin:

Che ne dite?


   for(i=pos; i<rates_total && !IsStopped(); i++)
     {
      double dmin=1000000.0;
      double dmax=-1000000.0;
      for(k=i-InpKPeriod+1; k<=i; k++)
       {double ima=iMA(Symbol(),1,60,0,1,0,k);
         if(dmin>ima)  dmin=ima;
         if(dmax<ima)  dmax=ima;
                   Comment(ima);
        }
      ExtLowesBuffer[i]=dmin;
      ExtHighesBuffer[i]=dmax;
     }

Ciao. Potete dirmi perché non vedeima=iMA(Symbol(),1,60,0,1,0,k). Il commento mostra una citazione molto più alta della linea stessa. È la ragione per cui i valori minimi e massimi non sono calcolati correttamente.

 
Rustam Bikbulatov:

Ciao. Potete dirmi perché non vedeima=iMA(NULL,60,24,0,1,0,k). Il commento mostra una citazione molto più alta della linea stessa. Questo è il motivo per cui i valori minimi e massimi non vengono calcolati correttamente.

iMA è la numerazione come nelle serie temporali, 0 è il numero più rilevante. Potrebbe essere il contrario nel tuo caso
 
Maxim Kuznetsov:
iMA è la numerazione come nelle serie temporali, 0 è il numero più rilevante. E tu probabilmente ce l'hai al contrario.

È una scommessa involontaria. Non cambia nulla. Il punto è che si mostra in modo errato con k!

Motivazione: