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

 
EVGENII SHELIPOV #:

Buona giornata a tutti!!!

Sto scrivendo codice per un EA per il Trailing Stop di ordini di gruppo dal prezzo medio di una griglia di ordini.

Nessun errore nel log, ma non funziona nemmeno il trawl. Ecco il codice, per favore suggerite dov'è l'errore. Grazie!

La rete a strascico è nel posto sbagliato!

Dovrebbe assomigliare a questo

Se prezzo di pareggio+profitto-tral! = TakeProfit, inizia la pesca a strascico!

Da dove vengono questi dati?

//+----------------------------------------------------------------------------+
//| Трейлинг стоп групповых ордеров                                            |
//+----------------------------------------------------------------------------+
void TrailingGroupOrder()
{
    price += OrderOpenPrice() * OrderLots();
    order_lots += OrderLots() ;
    for(int i = OrdersTotal()-1; i>=0; i--)
    {
     if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

OrderOpenPrice

Restituisce il prezzo aperto dell'ordine selezionato

doppioOrderOpenPrice();

Nota:

L'ordine deve essere preselezionato utilizzando la funzione OrderSelect().

 
MakarFX #:

Grazie).

 
MakarFX #:

Non è lì che si trova la rete a strascico!

Dovrebbe andare così:

se il prezzo di pareggio+profitto-tral! = TakeProfit eseguire la pesca a strascico

Buon pomeriggio Makar!!!!

Per quanto ho capito questa è la linea in questione. In questo caso un ordine di acquisto:

if(Bid - NormalizeDouble(price / order_lots, Digits) > TrailingStopGroupOrder*Point || OrderStopLoss() == 0)

Makar se puoi spiegare in modo più dettagliato

 
MakarFX #:

Non è lì che si trova la rete a strascico!

Dovrebbe andare così:

se il prezzo di pareggio+profitto-tral! = TakeProfit eseguire la pesca a strascico

Da dove vengono questi dati?

Oggi parli per enigmi, Makar.

Ci può essere un'altra domanda perché calcoliamo il prezzo di pareggio senza controllare????

 
MakarFX #:

Non è lì che si trova la rete a strascico!

Dovrebbe andare così:

se il prezzo di pareggio+profitto-tral! = TakeProfit eseguire la pesca a strascico

Da dove vengono questi dati?

OrderOpenPrice

Restituisce il prezzo aperto dell'ordine selezionato

doppioOrderOpenPrice();

Nota:

L'ordine deve essere preselezionato utilizzando la funzione OrderSelect().

Sì, ci ho pensato e tu hai già scritto

 
EVGENII SHELIPOV #:

Buon pomeriggio Makar!!!!

Per quanto ho capito, questa è la linea in questione. In questo caso un ordine di acquisto:

Makar se puoi spiegare in modo più dettagliato

Avete un gruppo di ordini, definite un punto di pareggio e create una linea, e questo è meglio farlo come una funzione separata!

    avg_price = NormalizeDouble(price / order_lots, Digits);
     {
     ObjectDelete(0, "AveragePriceLine");
     ObjectCreate(0,"AveragePriceLine" ,OBJ_HLINE, 0, 0, avg_price);
     ObjectSet("AveragePriceLine",OBJPROP_COLOR, Magenta);
     }

Poi hai il valore di profitto in pip che vuoi ottenere e aggiungi/sottrai a/da avg_price

    if (otype == OP_BUY) tp = NormalizeDouble (avg_price + TakeProfitGroupOrder*Point, Digits);
    if (otype == OP_SELL) tp = NormalizeDouble (avg_price - TakeProfitGroupOrder*Point, Digits);

E poi una funzione di pesca a strascico separata

per l'acquisto: se BID > avg_price = OrderModify()

per le vendite: se avg < avg_price = OrderModify()


Purtroppo nel tuo codice non vedo azioni logiche (soggettivamente)

 
EVGENII SHELIPOV #:

È quello che stavo pensando e che tu hai già scritto.

Separate le funzioni in modo che sia più facile per voi navigare.

Ecco un esempio di OnTick()

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(GetProfitFromStart()>CountProfit || GetProfitFromStart()<CountLoss*-1)
     {
      CloseOrder();
     }
   sl  = MathMax(Stoploss, MarketInfo(_Symbol, MODE_STOPLEVEL)) * Point();
   SL  = NormalizeDouble(sl*Point(),Digits);
   tp  = MathMax(Takeprofit, MarketInfo(_Symbol, MODE_STOPLEVEL)) * Point();
   TP  = NormalizeDouble(tp*Point(),Digits);
   //---
   if(CountOrders()==0&&ObjectGetInteger(0,"lab_Button",OBJPROP_STATE))
     {
      if(TradeSignal()>=0)
        {
         SendOrder(TradeSignal());
        }
     }
   //---
   if (!IsTradeAllowed()) 
     {DrawLABEL("lab_Торговля",0,0,0,clrRed,"Торговля запрещена"); return;} 
   else
     {DrawLABEL("lab_Торговля",0,0,0,clrLime,"Торговля разрешена");}
  }
//+------------------------------------------------------------------+

Come potete vedere ci sono solo chiamate di funzioni

 
MakarFX #:

Separare le funzioni per facilitare la navigazione.

Ecco un esempio di OnTick()

Come potete vedere ci sono solo chiamate a funzioni.

Grazie, Makar. Concentrerò i miei pensieri e penserò in questo modo

 
EVGENII SHELIPOV #:

Grazie, Makar, metterò insieme i miei pensieri e penserò in quella direzione.

(Alza la voce)
 
Domanda: Come faccio a ottenere un ordine di uscita dalla custodia dell'EA? Forse ci sono già alcuni screenshot o funzioni di mt4 di cui non sono a conoscenza. Per favore, illuminatemi. Non ho nessuna voglia e possibilità di studiare mql 3, 4, 5 ecc.