[ARCHIVIO] Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 3. - pagina 97

 
MaxZ:

Devo essermi perso qualcosa:



NewOrder è stato trattato grazie, ora il passo funziona
 
SeALALex:

Ho implementato NewOrder, grazie, ora l'ordine funziona.

Fate attenzione a questo codice. È stato scritto al volo e non è stato testato! :)))

E ho scritto solo un modo per risolvere il tuo problema.


A proposito, prima hai dato il seguente codice:

Болк открытия на бай
if(Buy==true) 
  {Buy=false;

   ticket=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask, Digits),5,SL,TP,Order,070177,0,Orange);
   if(ticket>0)
    { 
     if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) 
      {Print("BUY order opened : ",OrderOpenPrice());
       Alert("Buy Order for ",Symbol());
       SendMail("Buy Order "+Symbol()+" "+Ask,SL);     
       }
     }
     else Print("Error opening BUY order : ",GetLastError()); 
     return(0); 
   }

E se c'è un requote, per esempio? Allora l'ordine BUY non sarà aperto, mentre il segnale potrebbe essere corretto. E tra un paio d'ore vedrai che il prezzo si è spostato molto in alto, ma l'ordine BUY non si è aperto a causa del requote...

 
MaxZ:

Fate attenzione a questo codice. È stato scritto al volo e non è stato testato! :)))

E ho scritto solo un modo per risolvere il tuo problema.


A proposito, prima hai citato il seguente codice:

E se c'è un requote, per esempio? Allora l'ordine BUY non sarà aperto, mentre il segnale potrebbe essere corretto. E vedrete che il prezzo si è spostato molto in alto in un paio d'ore, ma l'ordine BUY non si è aperto a causa del requote...


E come ci si assicura contro questo?

 
SeALALex:


e come si fa a proteggersi da esso?

Il modo più elementare è riscrivere il codice in modo diverso:

Болк открытия на бай
if(Buy==true) 
  {ticket=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask, Digits),5,SL,TP,Order,070177,0,Orange);
   if(ticket>0)
    { 
     if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) 
      {Buy=false;
       Print("BUY order opened : ",OrderOpenPrice());
       Alert("Buy Order for ",Symbol());
       SendMail("Buy Order "+Symbol()+" "+Ask,SL);     
       }
     }
     else Print("Error opening BUY order : ",GetLastError()); 
     return(0); 
   }

Finché l'ordine non si apre, il segnale di apertura di una posizione long Buy rimarrà nello stato True.

 
MaxZ:

Il modo più elementare è riscrivere il codice in modo diverso:

Finché l'ordine non si apre, il segnale di apertura di una posizione long Buy rimarrà in uno stato True.


Grazie mille, e grazie mille a Roman!

Ho bisogno di aumentare il lotto in una serie di ordini di acquisto aperti senza margine (perché il margine a volte ci influenza in modo tale che riduce il lotto, e non ne ho bisogno), ho bisogno di un aumento rigoroso di una certa dimensione in una serie di ordini. Cioè se c'è una tendenza secondo un criterio un segnale di acquisto, poi secondo il secondo criterio appare un ulteriore segnale di acquisto e viene aperto un ordine; dopo il primo criterio è ancora un segnale di acquisto e secondo il secondo, dopo una piccola correzione appare un ulteriore segnale di acquisto e viene aperto un altro ordine, ma con un ordine più grande (la dimensione è impostata nei parametri iniziali); dopo che tutti gli ordini di acquisto sono chiusi appare un segnale di vendita e poi tutto inizia di nuovo con la dimensione iniziale del lotto.

Per favore, quale pezzo di codice dovrebbe essere mostrato?

 
SeALALex:


Grazie mille, e grazie mille a Roman!

Ma non riesco ancora a fargli aumentare un lotto di un certo passo, ho bisogno di aumentare un lotto in una serie di ordini di acquisto aperti senza margine (perché il margine a volte diminuisce molto, e io non lo voglio), ho bisogno di un aumento rigoroso di una certa dimensione in una serie di ordini.

Se non usate il margine nel calcolo dei lotti, e operate solo con parametri costanti specificati, per esempio, nelle variabili esterne, i lotti aumenteranno di conseguenza solo con valori costanti. Il principio per cui il codice può essere scritto l'ho dato sopra.

SeALALex:


Cioè se c'è una tendenza secondo un criterio un segnale di acquisto, poi secondo il secondo criterio appare un ulteriore segnale di acquisto - un ordine viene aperto, poi secondo il primo criterio il segnale di acquisto rimane ancora e secondo il secondo, dopo una piccola correzione il segnale di acquisto appare di nuovo e un altro ordine viene aperto, ma con una dimensione più grande (la dimensione è impostata nei parametri iniziali) e dopo tutti gli ordini di acquisto sono chiusi un segnale di vendita appare e poi tutto inizia di nuovo con la dimensione iniziale del lotto.

Per favore, quale pezzo di codice hai bisogno di mostrare?

Avete le variabili Lots, LotsInitial e LotsStep. Quando la tendenza cambia, si resetta Lots a zero e si assegna un valore iniziale a LotsInitial. Se la tendenza è ancora in corso e un segnale è già stato inviato per aprire un nuovo ordine, si aumenta la variabile Lots con il passo LotsStep e si apre un ordine.

Sembra che tu capisca tutta la logica, ma in qualche modo non riesci a trasformarla in dichiarazioni if. Perché, non lo so.

Forse questo può aiutare:

extern LotsInitial = 0.5;
extern LotsStep    = 0.1;
       Lots;

int start()
{
   ...

   if ((Тренд окончен) && (Все ордера закрыты) && (Пришёл сигнал о возможном начале нового тренда))
      Lots = LotsInitial;
 
   if ((Тренд подтверждён) && (Коррекция) && (Пришёл ещё сигнал открыться по тренду))
      Lots += LotsStep;
  
   ...
}
 
MaxZ:

Se non usate il margine nel calcolo dei lotti e operate solo con parametri costanti, impostati per esempio in variabili esterne, i lotti saranno di conseguenza aumentati solo da valori costanti. Il principio secondo il quale il codice può essere scritto l'ho dato sopra.

Avete le variabili Lots e LotsStep. Quando la tendenza cambia, si azzera Lots e si assegna un valore iniziale. Se il trend è ancora in corso e un segnale è già stato inviato per aprire un nuovo ordine, si aumenta la variabile Lots in incrementi di LotsStep e si apre un ordine.

Vedi che capisci tutta la logica, ma per qualche ragione non riesci a trasformarla in dichiarazioni if... Perché, non lo so.


Posso mettere una parte del codice come file responsabile dell'apertura come file e si guarda... L'ho fatto, ma sembra che ci sia qualcosa di sbagliato nel codice che ho postato, si apre un passo in più, ma non del tutto.
File:
 
SeALALex:

Posso incollare una parte del codice responsabile dell'apertura come file e tu la guardi... incollato ma sembra che ci sia qualcosa di sbagliato con il codice come ho postato si apre un passo in più ma da un colpo lungo.

Prima avresti corretto tutti gli errori. Perché dovresti aggiungere qualcosa al tuo EA se non funziona senza? Anche se questo codice non sembra un EA completamente funzionale. Devi averne tagliato delle parti e ora vuoi che corregga gli errori. :)))

Per esempio, init() non è chiuso... E variabile oscura: LastOrder...

Per favore, correggete questi errori.

 
MaxZ:

È meglio che prima sistemi tutti gli errori. Perché aggiungere qualcosa all'Expert Advisor se non funziona senza? Il codice non sembra avere la piena funzionalità dell'Expert Advisor. Devi averne tagliato delle parti e ora vuoi che corregga gli errori. :)))

Per esempio, init() non è chiuso... E variabile oscura: LastOrder...

Per favore, correggete gli errori.


Sì, l'ho assemblato come un set di costruzione sembra funzionare, ora cercherà certamente di portare più o meno ad una forma normale e si stenderà
 
splxgf:


Non si tratta di ND. point è la dimensione del punto, moltiplicandolo per zero cinque sarebbe per esempio 0,00005, non vedo il motivo di confrontare questo numero con OrderClosePrice()-OrderTakeProfit(). Il TP non garantisce esattamente lo stesso prezzo di chiusura. Inoltre le condizioni di controllo saranno diverse per Bais e Sé.

Questo design è più affidabile.



Grazie!!! Leggere. In più ci saranno condizioni di prova diverse per i bai e i selfie: una bella verità!!!