consulente esperto - domande varie - pagina 32

 

(Prima di provare a scrivere questo commento, penso di aver fatto ricerche approfondite per trovare la soluzione, sì, ho trovato thread simili, ma non ho trovato la soluzione per questo problema. )

Uso il seguente codice per l'ordine di vendita che mi mostra lo Stop Loss in pip, mi mostra il valore corretto fino a quando lo Stop Loss diventa positivo.
Quindi, non ho idea di come posso provare a risolvere questo problema.

Qualsiasi buon commento sarebbe meglio, per favore.
( nota: Non sto usando Trailing Stop per ora. Inoltre il codice qui sotto è solo per gli aggiornamenti delle informazioni, non per OrderSend() o cose simili. )

if(OrderType()==OP_SELL || (OrderType()==OP_SELLLIMIT || OrderType()==OP_SELLSTOP))
  {
   riskinpips=change_to_pips(OrderStopLoss()-OrderOpenPrice());
  }
Print("stop loss in pips",DoubleToString(riskinpips,2));

Grazie in anticipo.

Quando lo stop loss in profitto positivo

(nota: le etichette dello screenshot fatte dal programma di edizione delle foto per descrivere il mio problema)
 

Beh, è il valore più alto meno il valore più basso che ti dà il risultato, quindi puoi controllare quale è il più alto

if(OrderStopLoss()>OrderOpenPrice())
{
  // orderstoploss - orderopenprice
}

else if(OrderOpenPrice()>OrderStopLoss())
{
  // orderopenprice - orderstoploss
}
 
Marco vd Heijden:

Beh, è il valore più alto meno il valore più basso che ti dà il risultato, quindi puoi controllare qual è il più alto

if(OrderStopLoss()>OrderOpenPrice())
{
  // orderstoploss - orderopenprice
}

else if(OrderOpenPrice()>OrderStopLoss())
{
  // orderopenprice - orderstoploss
}

Mi rido da solo che non ci faccio mai caso. Penso che questo potrebbe aiutarmi. Presto lo proverò.

Grazie mille signor Marco

 

#Calcolo della valuta del profitto - Chiuso

Finora funziona perfettamente.
Grazie mille @Marco vd Heijden e @whroeder1

 

#Tempo - Aperto

Da quando ho iniziato a fare ricerche su Time / Clock per il mio EA. Vedo che gli autori usano JUST start() nell'indicatore per questo.
Io uso OnTimer() e OnTick() nel mio EA, non vorrei usare start().
Quindi ho solo bisogno di essere sicuro / imparare quale funzione speciale sarebbe meglio per la funzione Time and Clock?

Continuerò la ricerca su questo problema dopo 10 ore.
( nota: ho già trovato alcuni indicatori Time and Clock dalla pagina Codebase di Mql5.com - ma non mi piace copiare e incollare )

Qualsiasi buon commento, condivisione del forum e link e qualcos'altro sarebbe meglio per me.

Grazie in anticipo.

 

La funzione di avvio è sostituita da OnStart solo negli script. Negli Expert Advisor e negli indicatori dovrebbe essere rinominata rispettivamente in OnTick e OnCalculate. Il codice che deve essere eseguito durante un'operazione del programma mql5 dovrebbe trovarsi in queste tre funzioni:

Vedi: https://www.mql5.com/en/docs/migration

Documentation on MQL5: Moving from MQL4
Documentation on MQL5: Moving from MQL4
  • www.mql5.com
Moving from MQL4 - Reference on algorithmic/automated trading language for MetaTrader 5
 
Marco vd Heijden:

La funzione di avvio è sostituita da OnStart solo negli script. Negli Expert Advisor e negli indicatori dovrebbe essere rinominata rispettivamente in OnTick e OnCalculate. Il codice che deve essere eseguito durante il funzionamento di un programma mql5 dovrebbe trovarsi in queste tre funzioni:

Grazie tanto più @Marco questo comune così informativo per me. Ho già letto " Passaggio da MQL4 a MQL5 ".
 
Max Enrik:

#Tempo - Aperto

Da quando ho iniziato a fare ricerche su Time / Clock per il mio EA. Vedo che gli autori usano start() SOLO nell'indicatore per questo.
Io uso OnTimer() e OnTick() nel mio EA, non vorrei usare start().
Quindi ho solo bisogno di essere sicuro / imparare quale funzione speciale sarebbe meglio per la funzione Time and Clock?

Continuerò la ricerca su questo problema dopo 10 ore.
( nota: ho già trovato alcuni indicatori Time and Clock dalla pagina Codebase di Mql5.com - ma non mi piace copiare e incollare )

Qualsiasi buon commento, condivisione del forum e link e qualcos'altro sarebbe meglio per me.

Grazie in anticipo.

Usa OnTimer().

Usare TimeLocal() darà un aspetto migliore, ma non sarà sincronizzato con il fuso orario del broker.

Usando TimeCurrent() sarà sincronizzato con il vostro broker, ma potrebbe ritardare e "saltare" dei secondi a seconda di quando arrivano i tick. Questo esempio evidenzierà il problema:

#property strict

int OnInit()
  {
   EventSetTimer(1);
   return(INIT_SUCCEEDED);
  }

void OnTimer()
  {
   Comment(StringFormat("%s - Local\n%s - Broker",TimeToString(TimeLocal(),TIME_SECONDS),TimeToString(TimeCurrent(),TIME_SECONDS)));
  }
 

#Timer - Chiuso

honest_knave:

Utilizzare OnTimer().
Usare TimeLocal() darà un aspetto migliore, ma non sarà sincronizzato con il fuso orario del broker.
Usare TimeCurrent() sarà sincronizzato con il vostro broker, ma potrebbe ritardare e "saltare" dei secondi a seconda di quando arrivano i tick. Questo esempio evidenzierà il problema:

#property strict

int OnInit()
  {
   EventSetTimer(1);
   return(INIT_SUCCEEDED);
  }

void OnTimer()
  {
   Comment(StringFormat("%s - Local\n%s - Broker",TimeToString(TimeLocal(),TIME_SECONDS),TimeToString(TimeCurrent(),TIME_SECONDS)));
  }
Commento completamente utile. Grazie mille amico.
 

Forum sul trading, sistemi di trading automatizzati e strategie di trading di prova

expert advisor - domande varie

honest_knave, 2016.11.30 01:28

IMHO sarebbe meglio se tenessi tutti i tuoi calcoli di lotto insieme, piuttosto che dividerli tra OnChartEvent() e _lotCalc(). Una funzione che controlla min / max / step e fa l'incremento / decremento.

void OnChartEvent(const int      id     , // Event ID
                  const long   & lparam , // Parameter of type long event
                  const double & dparam , // Parameter of type double event
                  const string & sparam   // Parameter of type string events
                  )
{
    _lotCalc();
    //-------Process Button---------------------------------------------------------|
    if ( sparam == _btnLotMinus )
    {
        ObjectSetInteger( 0, sparam, OBJPROP_STATE, false );
        _lotSize = fmax(_lotMin, _lotSize-_lotStep);
        _calcUpdade( CALC_CHANGE_LOT );
        printf( " | Lot: %.2f  ", _lotSize );
        return;
    }   //---if Close
    //                          ...
}

void _lotCalc()
{
    //---
    _lotMin  = SymbolInfoDouble( _Symbol, SYMBOL_VOLUME_MIN  );
    _lotMax  = SymbolInfoDouble( _Symbol, SYMBOL_VOLUME_MAX  );
    _lotStep = SymbolInfoDouble( _Symbol, SYMBOL_VOLUME_STEP );

    //---
}

#Lot Step - ReOpen

@honest_knave- grazie per il tuo grande aiuto su Lot Size e Lot Step.

Quindi ho solo bisogno di migliorare questa parte di codice per quando " Lot Size >= ( Lot Step * 100 ) " che Lot Step aumenta di " Lot Step * 100 ".

// lot plus
if(sparam==lotbuttonplus)
  {
   if(lotsize>=(lotstep*100))
     {
      lotstep=lotstep*100;
      Print("lot step: ",lotstep);
     }

   lotmaxdivide=lotmax/lotmax *(lotvalue*10);
   lotsize=fmin(lotmaxdivide,lotsize+(( ctrlfalse) ? lotstep*10 : lotstep));

// global variable
   infoupdate();

   printf("Lot: %.2f ",lotsize);
   ObjectSetInteger(0,sparam,OBJPROP_STATE,false);
   return;
  }

Grazie in anticipo.

Motivazione: