[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non potrei andare da nessuna parte senza di te - 2. - pagina 315

 
Sai se il tester di strategia ha dei limiti sul numero di passaggi? Ho eseguito il tester, in basso a sinistra sopra la barra all'inizio del test c'era: 0/1280 (25706). Ho contato 25 copechi - questo è il numero di tutte le combinazioni possibili. Ma ha finito il test quando era: 1088/1280 (25706). Quindi ha fatto solo 1088 passaggi? Cosa significano le prime due cifre?
Inoltre, conta in qualche modo stranamente... quando ha aggiunto un altro criterio per 3 parametri, i 25 pezzi non sono aumentati di 3 volte, ma hanno dato qualcosa come 40 koz. È un problema tecnico o mi sbaglio da qualche parte?
 
AndrejFX:
Sai se il tester di strategia ha dei limiti sul numero di passaggi? Ho eseguito il tester, in basso a sinistra sopra la barra all'inizio del test c'era: 0/1280 (25706). Ho contato 25 koz - questo è il numero di tutte le combinazioni possibili. Ma ha finito il test quando era: 1088/1280 (25706). Quindi ha fatto solo 1088 passaggi? Cosa significano le prime due cifre?
Inoltre, conta in qualche modo stranamente... quando ha aggiunto un altro criterio per 3 parametri, i 25 pezzi non sono aumentati di 3 volte, ma hanno dato qualcosa come 40 koz. È un problema tecnico o mi sbaglio da qualche parte?
Leggete il manuale. è dettagliato lì personalmente.
 

Aiutate a sistemare il codice di strascico!!!

Dovrebbe rintracciare gli StopLoss già aperti alla distanza "TrailingStop", dal livello alto o basso, delle candele precedenti. Una volta avviato l'Expert Advisor, funziona solo con un ordine sul primo trade aperto. Una volta che lo StopLoss è attivato e la prossima operazione è aperta, l'ordine StopLoss non è tracciato. Se ho capito bene, questo è perché la variabile "ORDER_SL" non è cambiata e la condizione di cambiare l'ordine non è soddisfatta? Se sì, perché e come correggerlo?

Ecco il codice finale:

int ORDER=OrdersTotal();    
OrderSelect(ORDER,SELECT_BY_TICKET,MODE_TRADES);
int ORDER_Type=OrderType();
double ORDER_SL=OrderStopLoss();
double Point_High=iHigh(OrderSymbol(),0,2)-TrailingStop*Point;
double Point_Low=iLow(OrderSymbol(),0,2)+TrailingStop*Point;
            if (ORDER_Type==OP_BUY && ORDER_SL<Point_High){
                    OrderModify(OrderTicket(),OrderOpenPrice(),Point_High,OrderTakeProfit(),0,CLR_NONE);
                    while(!IsTradeAllowed()) Sleep(100);
            }
            if (ORDER_Type==OP_SELL && ORDER_SL>Point_Low){
                    OrderModify(OrderTicket(),OrderOpenPrice(),Point_Low,OrderTakeProfit(),0,CLR_NONE);
                    while(!IsTradeAllowed()) Sleep(100);
            }

Ecco l'EA per intero:

File:
 

Questo codice

int ORDER=OrdersTotal();    
OrderSelect(ORDER,SELECT_BY_TICKET,MODE_TRADES);

dovrebbe essere messo in perle. La cosa più interessante è che funziona, ma solo nel tester al primo ordine.

 
Christoff:

Aiuto con il trailing!!!

Dovrebbe rintracciare già aperto StopLosses alla distanza di "TrailingStop", dal livello di alto o basso, le candele precedenti. Dopo l'avvio, l'Expert Advisor lavora solo con un ordine sul primo trade aperto. Una volta che lo StopLoss è attivato e la prossima operazione è aperta, l'ordine StopLoss non è tracciato. Se ho capito bene, questo è perché la variabile "ORDER_SL" non è cambiata e la condizione di cambiare l'ordine non è soddisfatta? E se sì, perché e come correggerlo?

Ecco il codice della rete a strascico:

Ecco l'Expert Advisor per intero:

Prima di pescare qualcosa, è necessario selezionarla. Per prima cosa è necessario eseguire un ciclo di tutte le posizioni aperte del terminale, selezionando quelle che sono aperte dall'Expert Advisor. Ad ogni iterazione del ciclo, se l'ordine richiesto è selezionato, chiama il tuo trawl direttamente dal ciclo. Solo in questo caso, tutte le posizioni aperte dall'Expert Advisor saranno esaminate.

All'incirca così:

void Trailing(string sy, int mn) 
{
   int      i, err, ORDER_Type, k=OrdersTotal();
   double   PointX, ORDER_SL, Point_High, Point_Low;
 
   if (sy=="0") sy=Symbol();
   int    dg=MarketInfo(sy, MODE_DIGITS);
   double pt=MarketInfo(sy, MODE_POINT);
   
   if(dg==5 || dg==3) PointX=pt*10;
   if(dg==4 || dg==2) PointX=pt;
   
   for (i=0; i<k; i++) {
      if (OrderSelect(i, SELECT_BY_POS)) {
         if (OrderSymbol()!=sy)        continue;
         if (OrderType()>1)            continue;
         if (OrderMagicNumber()!=mn)   continue;
               
         ORDER_Type=OrderType();
         ORDER_SL=OrderStopLoss();
         Point_High=iHigh(OrderSymbol(),0,2)-TrailingStop*PointX;
         Point_Low=iLow(OrderSymbol(),0,2)+TrailingStop*PointX;
         if (ORDER_Type==OP_BUY)
            if (NormalizeDouble(Point_High-ORDER_SL,dg)>0) {
            OrderModify(OrderTicket(),OrderOpenPrice(),Point_High,OrderTakeProfit(),0,CLR_NONE);
            while(!IsTradeAllowed()) Sleep(100);
            }
         if (ORDER_Type==OP_SELL)
            if (NormalizeDouble(ORDER_SL-Point_Low,dg)>0) {
            OrderModify(OrderTicket(),OrderOpenPrice(),Point_Low,OrderTakeProfit(),0,CLR_NONE);
            while(!IsTradeAllowed()) Sleep(100);
            }
         }
      if (!OrderSelect(i, SELECT_BY_POS)) {
         err=GetLastError();
         Print("FUNC Trailing: Ошибка выбора ордера - ", err);
         break;
         }
      }
   return;
}

Non ho guardato il codice del tuo trawl, ma l'ho lasciato così com'è (anche se dovrei anche cambiarlo - aggiungere un controllo per StopLevel da non superare, o forse qualcos'altro), e aggiunto solo un ciclo sugli ordini e la normalizzazione quando si confrontano i doppi nel tuo codice trawl, e così via ... alcune cose utili ... Lo capirai se lo vorrai :)

ZS. Non ho rivisto il codice, l'ho scritto così com'è, quindi potrebbero esserci degli errori. È solo un esempio.

Ora, in quel punto del codice in cui avete bisogno di rastrellare le posizioni, chiamate questa funzione:

Trailing(Symbol(), Magic);
Magic - numero magico impostato nell'EA come un numero intero unico in modo che possa distinguere i propri ordini dagli ordini di un altro EA o dagli ordini aperti manualmente dove non c'è alcun numero magico.
Se lasciamo Symbol() nella chiamata della funzione, le posizioni del simbolo su cui si trova il nostro EA saranno mirate.
In alternativa, invece di Symbol(), potete sostituirlo con il nome della coppia di valute di cui volete esaminare le posizioni.
 
Per favore, aiutatemi a scambiare dati nel modo più veloce tra i terminali MT4 su un computer.
 
trave:
Per favore, aiutatemi a scambiare dati nel modo più veloce tra i terminali MT4 su un computer.

Se avete bisogno di copiare le transazioni, ecco il copiatore. Se scambiate solo dati, allora dovete fare una dll
File:
kopirowshik.zip  465 kb
 
drknn:

Se volete copiare i mestieri, ecco il copiatore. Se volete solo scambiare dati, dovete fare una dll

Buone vacanze a voi... :-)))
 
Vinin:

Non dovresti postare roba rubata su questo forum. È una strada che porta all'esilio.

è in senso figurato, questo tacchino è stato finalizzato da me.
 
Roman.:
Buone vacanze a voi... :-)))
Vladimir, visto che hai postato una compilation, devi aver affrontato questo problema.
Avete trovato una variante pronta e semplice per trasferire una variabile da terminale a terminale attraverso la memoria, la variabile di Windows, ecc.
Come variante finale, un indicatore che disegna la linea Close[0] da un altro terminale su un terminale online. Su un grafico a tick questo confronto sarebbe molto chiaro.