Chiedete! - pagina 64

 
ryanklefas:
Penso che la funzione normalizeDouble funzionerebbe anche per te. Ho anche visto del codice che usa le funzioni MathFloor e MathCeiling per ottenere la stessa cosa.

Quindi, quello che stai dicendo è che il calcolo dovrebbe funzionare nel modo in cui l'ho codificato nella sezione "Inizio variabile" come indicato di seguito:

double LotSize = NormalizeDouble(Lot_Size_Ratio*((AccountBalance()/1000)), 3);

Allora forse il mio problema è altrove, perché quando imposto il seguente

extern bool LotSizeManager = True;

l'EA non esegue alcun trade. Quando lo imposto su false esegue i trade. Presumo che non esegua nessuna operazione quando questo valore è True perché c'è un problema con il calcolo.

 
waaustin:
double LotSize = NormalizeDouble(Lot_Size_Ratio*((AccountBalance()/1000)), 3);

double LotSize = NormalizeDouble(Lot_Size_Ratio*((AccountBalance()/1000)), 1); // 0: fulllots, 1: minilots, 2: microlots, 3: mai usato

 
Michel:
double LotSize = NormalizeDouble(Lot_Size_Ratio*((AccountBalance()/1000)), 1); // 0: fulllots, 1: minilots, 2: microlots, 3: mai usato

Quindi il tuo dire è che dipende da quale accuratezza voglio che la dimensione del lotto sia. Quindi, se voglio una precisione di un microlotto, come 0,75 lotti, allora userei un valore di 2.

 
waaustin:
Quindi stai dicendo che dipende dalla precisione che voglio che la dimensione del lotto sia. Quindi, se voglio la precisione di un microlotto, come 0.75 Lotti, allora userei un valore di 2.

Sì, ce l'hai!

Ma assicurati che i microlotti (2 decimali) siano ok per il tuo broker e per il tipo di conto che hai.

Non so molto bene come IBFX funziona con il conto mini, cioè se i microlotti sui miniaccounts sono anche chiamati minilotti e hanno solo 1 decimale. Forse qualcuno che usa IBFX può rispondere qui?

Tuttavia, la cosa migliore è chiedere al tuo broker.

 
Michel:
Sì, ce l'hai fatta!

Ma assicurati che i microlotti (2 decimali) siano ok per il tuo broker e il tipo di conto che hai.

Non so molto bene come IBFX funziona con il conto mini, cioè se i microlotti su miniaccounts sono anche chiamati minilotti e hanno solo 1 decimale. Forse qualcuno che usa IBFX può rispondere qui?

Tuttavia, la cosa migliore è chiedere al tuo broker.

Grazie mille. Il codice LotSizing sembra funzionare bene. Tuttavia, sembra che io abbia un altro bug nel codice da qualche parte e non riesco a capirlo.

Ho l'EA caricato su più di una coppia, ma piazza operazioni solo su una coppia. Il codice LotSizing funziona bene. Ma non piazza altre operazioni su altre coppie di valute. Tuttavia, quando imposto il seguente valore

extern bool LotSizeManager = False;

l'EA piazza compravendite per ogni coppia di valute a cui ho collegato l'EA.

 
waaustin:
Grazie mille. Il codice LotSizing sembra funzionare bene. Tuttavia, sembra che io abbia un altro bug nel codice da qualche parte e non riesco a capirlo.

Ho l'EA caricato su più di una coppia, ma piazza i trade solo su una coppia. Il codice LotSizing funziona bene. Ma non piazza altre operazioni su altre coppie di valute. Tuttavia, quando imposto il seguente valore

extern bool LotSizeManager = False;

l'EA piazza operazioni per ogni coppia di valute a cui ho collegato l'EA.

Non importa. Ho capito dov'è il problema! Grazie per l'aiuto.

 

Problema: Al tempo definito dall'utente, l'EA cerca di piazzare un ordine pendente ma il prezzo corrente è troppo vicino perché il broker accetti l'ordine.

Domanda: Come potrei codificare un ciclo che controlli l'iOpen della barra 1 minuto ogni minuto fino a quando non accetta l'ordine? Non sono sicuro di come incorporare il controllo ogni minuto fino a quando l'ordine può essere inserito. Sembra che il codice attuale dimentichi quello che sta cercando dopo alcuni minuti perché una volta che il prezzo è fuori dal modo di entrare non succede nulla.

Penso che una parte di esso sia come segue

double Open_Price_Every_Minute;

Open_Price_Every_Minute = iOpen(NULL,PERIOD_M1,0);

Open_Price_Every_Minute = NormalizeDouble(Open_Price_Every_Minute, Digits);

if (Allow_LimitOrder_for_Entry_A==false)

{

OrderSend(Symbol(), OP_BUYSTOP, Lots, LA, Slippage, LASL, LATP, "", Magic, 0, FireBrick);

OrderSend(Symbol(), OP_SELLSTOP, Lots, SA, Slippage, SASL, SATP, "", Magic, 0, FireBrick);

}

Come sempre, grazie per la vostra assistenza e il vostro tempo.

James

 
proverbs:
Sembra che il codice attuale dimentichi quello che sta cercando dopo pochi minuti perché una volta che il prezzo è fuori dal modo di entrata non succede nulla.

Non credo che vogliate avere il loop in esecuzione all'infinito in un EA. Non l'ho mai provato prima, ma non credo che sarebbe una buona cosa. Se vuoi che l'EA "ricordi" quello che ha fatto, memorizza qualsiasi dato che hai bisogno di ricordare come variabili statiche (varaibili dichiarate al di fuori della funzione principale) o come variabili globali MT4.

 
ryanklefas:
Non credo che tu voglia avere il loop in esecuzione all'infinito in un EA. Non l'ho mai provato prima, ma non credo che sarebbe una buona cosa. Se vuoi che l'EA "ricordi" quello che ha fatto, memorizza qualsiasi dato che hai bisogno di ricordare come variabili statiche (varaibili dichiarate al di fuori della funzione principale) o come variabili globali MT4.

Ehi!

Mettere l'ea procesing nel loop è un buon modo, leggi questo:

https://www.mql5.com/en/articles/1462

Devi solo farlo nel modo giusto

 

Kalenzo,

Grazie per l'articolo. Sembra che sto per imparare più di quanto ho chiesto.