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

 

Lo sto ancora affinando:

se la condizione è vera

ordine aperto 1

se il prezzo si è mosso dove dovrebbe o no

ordine aperto 2

LastLot= ordine 2 (o numero maggiore)

LastPrice= order2 (o un numero maggiore)

Se il prezzo si è o non si è mosso dove dovrebbe...

LastLot= ordine 3 (o numero maggiore)

LastPrice= ordine 3 (o numero maggiore)

Il problema è che l'ultimo (o meno) ordine sarà sempre tra uno StopLoss e un TakeOut, il che significa che non si azzererà quando gli altri si chiuderanno perché l'ordine stesso sarà ancora lì. Come lo leghiamo agli altri se non conosciamo il numero di ordini?

Il meccanismo di legare l'ultimo primo o il penultimo agli altri si è rivelato inefficiente poiché il loro numero cambia insieme ai numeri.

Il risultato dovrebbe essere qualcosa come "se un qualsiasi ordine della serie data ha chiuso, chiudi tutti gli altri".

Controllo della serie - il primo ordine della direzione corrente (un altro ordine non si aprirà) - qui si dovrebbe usare un identificatore aggiuntivo o qualche altro metodo vincolante. La chiave - il primo ordine è aperto secondo le condizioni, il resto degli ordini sono ausiliari.

qualche pensiero?

 
trader781:

Lo sto ancora affinando:

se la condizione è vera

ordine aperto 1

se il prezzo si è mosso dove dovrebbe o no

ordine aperto 2

LastLot= ordine 2 (o numero maggiore)

LastPrice= order2 (o un numero maggiore)

Se il prezzo si è o non si è mosso dove dovrebbe...

LastLot= ordine 3 (o numero maggiore)

LastPrice= ordine 3 (o numero maggiore)

Il problema è che l'ultimo (o meno) ordine sarà sempre tra uno StopLoss e un TakeOut, il che significa che non si azzererà quando gli altri si chiuderanno perché l'ordine stesso sarà ancora lì. Come lo leghiamo agli altri se non conosciamo il numero di ordini?

Il meccanismo di legare l'ultimo primo o il penultimo agli altri si è rivelato inefficiente poiché il loro numero cambia insieme ai numeri.

Il risultato dovrebbe essere qualcosa come "se un qualsiasi ordine della serie data ha chiuso, chiudi tutti gli altri".

Controllo della serie - il primo ordine della direzione corrente (un altro ordine non si aprirà) - qui si dovrebbe usare un identificatore aggiuntivo o qualche altro metodo vincolante. La chiave - il primo ordine è aperto secondo le condizioni, il resto degli ordini sono ausiliari.

Qualche pensiero?

Non è chiaro. Cerca di esprimere i tuoi pensieri in modo più chiaro.

Questo è il seguente:"Se il prezzo va nel modo giusto o no, dovremmo aprire l'ordine 2" - come dovremmo capire chedovremmo aprire l'ordine 2 in ogni caso?

E avremo sempre più "altrimenti".

E se non vogliamo avere domande come"Come collegarlo con gli altri ordini quando l'importo del prezzo è sconosciuto", dovremmo prima capire l'importo.

 
Vitalie Postolache:

È confuso, incomprensibile. Cerca di rendere i tuoi pensieri più chiari.

Questo"se il prezzo si è mosso nella giusta direzione o no - per aprire l'ordine2" - come dovremmo intendere che in ogni caso"per aprire l'ordine2"?

E avremo sempre più "altrimenti".

E se non vogliamo entrare in questioni come"Come collegarlo con gli altri ordini se non conosciamo l'importo", dovremmo prima scoprire l'importo.

OK, con i numeri

EURUSD=1,10000

un comando per aprire un ordine di acquisto secondo il TP (già scritto)

se EURUSD=1.10200 diamo un ordine di acquisto (già scritto)

se EURUSD=1.09800 per "comprare" (è già scritto)

e così via con un passo di 200

se uno degli ordini è chiuso (stop e takeover sono impostati, ma non a tutti)

Chiudere l'intera griglia

cercando un modo per identificare la griglia
 
trader781:

OK, con i numeri

EURUSD=1,10000

comando per aprire un ordine di acquisto secondo l'ordine corrente (già scritto)

se EURUSD=1,10200 deve essere riempito per comprare (già scritto)

se EURUSD=1.09800 per "comprare" (è già scritto)

e così via con un passo di 200

se uno degli ordini si chiude (stop e takeover sono già stati piazzati)

chiudere l'intera griglia

alla ricerca di un modo per identificare la griglia
Si possono aggiungere commenti con il numero d'ordine. E, se la serie di ordini è dello stesso tipo, possiamo semplicemente ricalcolarli e fissare l'importo.
 
Vitalie Postolache:
Si possono aggiungere commenti con il numero d'ordine. E se l'intera serie di ordini di un tipo - allora dovrebbero semplicemente ricalcolarli e fissare la quantità.

Stavo pensando ai commenti, ma a giudicare dal feedback lo chef pensa che siano immangiabili e o li cancella o li cambia con i propri

E per quanto riguarda il conteggio, quindi devo contare e registrare il numero quando ne aggiungo un altro?

 
trader781:

e riguardo al conteggio, devo contare e registrare la quantità quando ne aggiungo un altro?

Sì. E se il numero è diminuito dall'ultima volta - chiudete tutti quelli rimasti.

Puoi anche monitorare gli ordini chiusi nella cronologia. E chiudere la serie quando appare un nuovo ordine che soddisfa le caratteristiche specificate.

Puoi anche non impostare TP/SL nell'ordine, ma calcolare il TP/SL totale nell'Expert Advisor per l'intera serie. Usateli per chiudere la serie. I vantaggi - la società di intermediazione non vede i livelli di breakpoint, e il problema di trovare la serie rimane se un TP o un SL è scattato a un ordine.
 
Saluti ...Felice Anno Nuovo ...Augurandovi tutto il meglio ...In questo codice si prega di cambiare il calcolo del lotto è stato effettuato al massimo conto leva possibile
//+------------------------------------------------------------------+
double volume(string symbol,double risk,double sl)
  {
   double lot=0.0;
   double procent=0.0;
   double balans=0.0;
   double tc = SymbolInfoDouble(symbol,SYMBOL_TRADE_CONTRACT_SIZE);
   double tv = SymbolInfoDouble(symbol,SYMBOL_TRADE_TICK_VALUE);
   double ts=SymbolInfoDouble(symbol,SYMBOL_TRADE_TICK_SIZE);
   double point=SymbolInfoDouble(symbol,SYMBOL_POINT);

   if(Type_Balanse==Balance) balans=AccountInfoDouble(ACCOUNT_BALANCE);
   if(Type_Balanse==Equity) balans=AccountInfoDouble(ACCOUNT_EQUITY);
   if(Type_Balanse==FreeMargin) balans=AccountInfoDouble(ACCOUNT_FREEMARGIN);

   procent=(balans/100.0)*risk;

   switch((int)MarketInfo(symbol,MODE_PROFITCALCMODE))
     {
      case 0: if(sl!=0 && tv!=0) lot=procent/(sl*tv);break;
      case 1: if(sl!=0 && point!=0 && tc!=0) lot=procent/(sl*point*tc);break;
      case 2: if(sl!=0 && point!=0 && tv!=0 && ts!=0) lot=procent/(sl*point*(tv/ts));break;
     }
   return(NormalizeVolume(symbol,lot));
  }
 
Come prescrivere nel Expert Advisor calcolo automatico del lotto, a seconda della leva ...Dire la leva 1:50 deposito 3000.
 
Movlat Baghiyev:
OK, lascia che ti faccia una semplice domanda. Come faccio a impostare l'EA per calcolare automaticamente il lotto a seconda della leva... diciamo leva 1:50 deposito 3000...

Prova così:

void OnTick()
{
  Comment( cLot(100) );
}
//===============================================================================================
//------------------------------------ Расчет лота по риску ------------------------------------+
//===============================================================================================
double cLot(double Percent=0) {
double Free=AccountFreeMargin(),
        One_Lot=MarketInfo(_Symbol,MODE_MARGINREQUIRED),
        Min_Lot=MarketInfo(_Symbol,MODE_MINLOT),
        cStep=MarketInfo(_Symbol,MODE_LOTSTEP),
        Lots_New=0;
if(Percent > 100) {
    Percent = 100;
  }
  if(Percent == 0) {
    Lots_New = 0;
     return(0);
   } else {
    Lots_New = MathFloor(Free*Percent/100/One_Lot/cStep)*cStep;
   }
  if(Lots_New < Min_Lot) {
    Lots_New = Min_Lot;
  }
  if(Lots_New*One_Lot > Free) {
    return(0);
  }
   return(NormalizeDouble(Lots_New,LotDigit()));
}
//===============================================================================================
//-------------------- Кол-во знаков после точки в значении торгового лота ---------------------+
//===============================================================================================
int LotDigit(){
  double lotStep = MarketInfo(_Symbol,MODE_LOTSTEP);
return((int)MathCeil(MathAbs(MathLog(lotStep)/MathLog(10))));
}
 
Scusate, ho bisogno di un qualche tipo di scelta della % di rischio. Ho solo bisogno di aprire il più grande lotto possibile in una volta, in incrementi fino a 0,01