funzione di calcolo automatico della dimensione del lotto? - pagina 3

 

Ah, ho capito il problema... hai impostato lo script per piazzare un ordine "BUY" invece di cambiare la variabile esterna in BUY STOP... ecco perché ha piazzato un ordine a mercato.

Dal tuo post:

2010.11.04 20:37:53 Assisted_Order_Script_2010.11.01 EURJPY,H1 inputs: Order_Type="BUY"; OpenBidPrice=115.827; StopLossBidPrice=115.689; TakeProfitBidPrice=115.885; MaxPercentEquityAtRisk=1; MinLotOverRide=false;

Prova BUY STOP.


Ottengo 0,12 lotti per EURJPY su un conto demo finanziato con $2300 USD

2010.11.04 20:10:16 Assisted_Order_Script_2010.11.01 EURJPY,H1: open #155713274 buy stop 0.12 EURJPY a 115.840 sl: 115.689 tp: 115.885 ok
2010.11.04 20:10:15 Assisted_Order_Script_2010.11.01 EURJPY,H1: tentato OP_BUYSTOP 0,12000000 lotti @115.84000000 sl:115.68900000 tp:115.88500000
2010.11.04 20:10:15 Assisted_Order_Script_2010.11.01 EURJPY,H1: Current EquityAtRisk = $22.44 e Current Lotsize = 0.12 e Profit Target = $6.69 per un rapporto Profit:Loss di 0.3:1
2010.11.04 20:10:15 Assisted_Order_Script_2010.11.01 EURJPY,H1: Max allowed EquityAtRisk = $23.00 e Max computed Lotsize = 0.123
2010.11.04 20:10:15 Assisted_Order_Script_2010.11.01 EURJPY,H1 input: Order_Type="BUY STOP"; OpenBidPrice=115.827; StopLossBidPrice=115.689; TakeProfitBidPrice=115.885; MaxPercentEquityAtRisk=1; MinLotOverRide=false;
 

Ho anche fatto l'esempio del buystop NZDJPY:

2010.11.04 20:14:16 Assisted_Order_Script_2010.11.01 NZDJPY,H1: open #155714279 buy stop 0,10 NZDJPY a 64,319 sl: 64,134 tp: 64,460 ok<br / translate="no"> 2010.11.04 20:14:15 Assisted_Order_Script_2010.11.01 NZDJPY,H1: tentato OP_BUYSTOP 0,10000000 lotti @64.31900000 sl:64.13400000 tp:64.46000000
2010.11.04 20:14:15 Assisted_Order_Script_2010.11.01 NZDJPY,H1: Current EquityAtRisk = $22.90 e Current Lotsize = 0.1 e Profit Target = $17.45 per un rapporto Profit:Loss di 0.8:1
2010.11.04 20:14:15 Assisted_Order_Script_2010.11.01 NZDJPY,H1: Max allowed EquityAtRisk = $23.00 e Max computed Lotsize = 0.1004
2010.11.04 20:14:15 Assisted_Order_Script_2010.11.01 NZDJPY,H1 input: Order_Type="BUY STOP"; OpenBidPrice=64.297; StopLossBidPrice=64.134; TakeProfitBidPrice=64.46; MaxPercentEquityAtRisk=1; MinLotOverRide=false;

Ora il prezzo dell'ordine di entrata tentato di 64.297 era troppo vicino all'attuale prezzo di mercato così la routine orderreliable ha spostato il prezzo di entrata a 64.319 per questa ragione, ma ottengo ancora un ragionevole 0.10 di lotsize.

A questo punto devo concludere che c'è qualcosa di sbagliato nel tuo codice nel modo in cui hai implementato i file di inclusione e/o come usi gli output. Dovrai caricare il codice per ispezionarlo, in modo da permettermi di approfondire la questione.

 

Sì, è un conto demo denominato in USD, leva 1:100. OK, l'ho appena eseguito su EURJPY come BUY STOP, sembra che abbiamo ottenuto buoni numeri questa volta. Il log dell'esperto dice:


2010.11.04 21:37:18 Assisted_Order_Script_2010.11.01 EURJPY,H1: rimosso
2010.11.04 21:37:18 Assisted_Order_Script_2010.11.01 EURJPY,H1: uninit reason 0
2010.11.04 21:37:18 Assisted_Order_Script_2010.11.01 EURJPY,H1: aperto #155719095 buy stop 0.11 EURJPY a 115.843 sl: 115.689 tp: 115.885 ok
2010.11.04 21:37:16 Assisted_Order_Script_2010.11.01 EURJPY,H1: tentato OP_BUYSTOP 0.11000000 lotti @115.84300000 sl:115.68900000 tp:115.88500000
2010.11.04 21:37:16 Assisted_Order_Script_2010.11.01 EURJPY,H1: Current EquityAtRisk = $20.95 e Current Lotsize = 0.11 e Profit Target = $5.71 per un rapporto Profit:Loss di 0.3:1
2010.11.04 21:37:16 Assisted_Order_Script_2010.11.01 EURJPY,H1: Max allowed EquityAtRisk = $22.73 e Max computed Lotsize = 0.1193
2010.11.04 21:37:16 Assisted_Order_Script_2010.11.01 EURJPY,H1 input: Order_Type="BUY STOP"; OpenBidPrice=115.827; StopLossBidPrice=115.689; TakeProfitBidPrice=115.885; MaxPercentEquityAtRisk=1; MinLotOverRide=false;
2010.11.04 21:36:23 Assisted_Order_Script_2010.11.01 EURJPY,H1: caricato con successo
2010.11.04 21:34:16 Assisted_Order_Script_2010.11.01 EURJPY,H1: rimosso
2010.11.04 21:34:11 Assisted_Order_Script_2010.11.01 EURJPY,H1: caricato con successo



... e ha piazzato l'ordine pendente buystop come 0,11 lotti. perfetto. Sì, credo che qualcosa sia "incasinato" nel mio codice, come dici tu... lol. Sono stato molto attento a mettere il tuo codice... cosa potrebbe essere? Ok, farò un po' di debugging qui e ti farò sapere. Scusa se ti infastidisco Phillip!


Grazie

Shawn

 

Devo ricominciare da capo con la tua versione più recente che hai appena postato, Phillip?


Shawn

 

Ha senso usare il più recente, sono io.

 

Ciao Phillip, stavo per intervenire nuovamente sul mio EA per aggiornarlo alla tua ultima versione che hai postato qualche giorno fa, ma dopo aver riletto quel post... mi ha lasciato un discreto numero di domande. Ho pensato di chiedere a te prima di fare a pezzi il mio EA:


(1) Hai menzionato che ci sono 2 nuovi file include:


Analyze_Currency_Symbol_2010.10.29.mqh (34.54 KB)

Trade_Position_Management_2010.10.29.mqh (26.68 KB)


... e il vecchio StopLoss_Manager_2010.05.24.mqh? Quel file non è più necessario nella tua nuova versione?


(2) Dove dici:


"Passo 2: Aggiungi quanto segue all'inizio del tuo EA in modo che abbia accesso alle funzioni di chiamata contenute nei file allegati

#include <OrderReliable_2010.10.12.mqh>

#include <Trade_Position_Management_2010.10.29.mqh>"


... questa è una nuova versione o OrderReliable? Stavo usando LibOrderReliable.mqh. È cambiato qualcosa con quello? Inoltre, non dobbiamo includere anche il nuovo file Analyze_Currency_Symbol_2010.10.29.mqh?


(3) In questa linea di codice che dici di aggiungere quando usi la nuova versione:


double CurrentLotSize=LotSize(CurrentEquityAtRisk,OpenPrice_ND,StopLossPrice_ND,CurrentOrderType);


... cosa sono OpenPrice_ND e StopLossPrice_ND? Sono variabili che devo dichiarare o sono incorporate da qualche parte nei vostri file include? Anche in questa nuova versione della tua funzione LotSize, il numero di parametri e il loro ordine è cambiato un po', vero? La chiamata a LotSize nella tua versione precedente era:


CurrentLotSize=LotSize(CurrentEquityAtRisk,CurrentStopLossPrice,CurrentOrderType,CurrentSymbolType,CurrentCounterPairForCross);


(4) Ho notato che nel mio codice, usando la tua versione precedente, avevo assegnato CurrentOrderType=OP_BUY; in realtà, sto facendo un ordine di acquisto. Questo potrebbe fare la differenza?



Scusa se ti infastidisco, ma ero un po' disorientato da queste cose.


Grazie

Shawn

 

(1) You mention there's 2 new include files:


Analizzare_Currency_Symbol_2010.10.29.mqh (34.54 KB)

Trade_Position_Management_2010.10.29.mqh (26,68 KB)


... e il vecchio StopLoss_Manager_2010.05.24.mqh? Quel file non è più necessario nella tua nuova versione?


Non sono davvero sicuro del perché ho aggiunto quella parte al mio post originale, se non per garantire che l'utente finale abbia un set completo di file da cui attingere.

Personalmente uso una versione aggiornata di quel gestore di stoploss, ma non ha alcuna attinenza con questo thread, si dovrebbe implementare qualsiasi procedura di stoploss che si preferisce utilizzare. Il codice che ho caricato in questo thread non si basa su un file di inclusione di stoploss, ma si basa su di voi per impostare correttamente il vostro codice per identificare il prezzo di stoploss in modo da poterlo inviare alla funzione di chiamata equityatrisk.

(2) Dove dici:


"Passo 2: aggiungi quanto segue all'inizio del tuo EA in modo che abbia accesso alle funzioni di chiamata contenute nei file allegati

#include <OrderReliable_2010.10.12.mqh>.

#include <Trade_Position_Management_2010.10.29.mqh>"


... è una nuova versione o OrderReliable? Stavo usando LibOrderReliable.mqh. È cambiato qualcosa con quello? Inoltre, non dobbiamo includere anche il nuovo file Analyze_Currency_Symbol_2010.10.29.mqh?

È una nuova versione, ho postato il link ad essa in fondo al mio post in fondo alla prima pagina di questo thread (lo linkerei ma la ricerca è rotta, argh!)

Ho modificato la nuova versione in modo che funzioni in modo trasparente con i broker di tipo ecn. Inviate i vostri ordini attraverso ordersendreliable e non importa se il broker accetta o meno SL & TP sugli ordini a mercato, lo script orderreliable lo gestisce per voi.

(3) In questa linea di codice che dici di aggiungere quando usi la nuova versione:


double CurrentLotSize=LotSize(CurrentEquityAtRisk,OpenPrice_ND,StopLossPrice_ND,CurrentOrderType);


... cosa sono OpenPrice_ND e StopLossPrice_ND? Sono variabili che devo dichiarare o sono incorporate da qualche parte nei vostri file include? Anche in questa nuova versione della tua funzione LotSize, il numero di parametri e il loro ordine è cambiato un po', vero? La chiamata a LotSize nella tua versione precedente era:

Sì, queste sono variabili che devi dichiarare a un certo punto del tuo codice e assegnare loro i prezzi di mercato per i quali vuoi aprire la nuova posizione (OpenPrice_ND) e il prezzo di stop loss (StopLossPrice_ND).

In alternativa potresti rinominare le mie variabili con quelle che stai già usando. Considerate queste variabili come dei segnaposto, sostituite le vostre variabili quando è il caso.

(4) Ho notato che nel mio codice usando la vostra versione precedente, avevo assegnato CurrentOrderType=OP_BUY; In realtà, sto facendo un ordine di acquisto stop. Questo potrebbe fare la differenza?
Non fa alcuna differenza. Tutto ciò che è importante è che passiate correttamente l'ordertype alle rispettive funzioni di chiamata. Sono già codificate per fare la cosa giusta a seconda dell'ordertype. Se non inviate l'ordertype corretto alla funzione di chiamata, allora otterrete sicuramente risultati non validi dalle funzioni di chiamata stesse.

Queste sono tutte buone domande, se non chiedete allora non potete aspettarvi di imparare ;)
 
1005phillip:

Non sono davvero sicuro del perché ho aggiunto quella parte al mio post originale, se non per garantire che l'utente finale abbia un set completo di file da cui attingere.

Personalmente uso una versione aggiornata di quel gestore di stoploss, ma non ha alcuna attinenza con questo thread, dovresti implementare qualsiasi procedura di stoploss tu preferisca usare. Il codice che ho caricato in questo thread non si basa su un file di inclusione di stoploss, ma si basa su di voi per impostare correttamente il vostro codice per identificare il prezzo di stoploss in modo da poterlo inviare alla funzione di chiamata equityatrisk.



>>> OK! Ho i miei stoploss, quindi non ne ho bisogno - lo rimuoverò!



È una nuova versione, ho postato il link ad essa in fondo al mio post in fondo alla prima pagina di questo thread (lo linkerei ma la ricerca è ROTTO, argh!)

Ho modificato la nuova versione in modo che funzioni in modo trasparente con i broker di tipo ecn. Invia i tuoi ordini attraverso ordersendreliable e non importa se il broker accetta o meno SL & TP sugli ordini a mercato, lo script orderreliable lo gestisce per te.


>>> OK, sto già usando OrderSendReliable2Step, quindi lascerò il mio codice così com'è, usando il mio esistente LibOrderReliable.mqh. Tuttavia, non è necessario includere anche il nuovo file Analyze_Currency_Symbol_2010.10.29.mqh?



Sì, queste sono variabili che devi dichiarare a un certo punto del tuo codice e assegnare loro i prezzi di mercato per i quali vuoi aprire la nuova posizione (OpenPrice_ND) e il prezzo di stop loss (StopLossPrice_ND).

In alternativa potresti rinominare le mie variabili con quelle che stai già usando. Considera quelle variabili come segnaposto, sostituisci le tue variabili dove appropriato.


>>> Capito, è quello che ho pensato che fossero. Penso che tu abbia saltato questo commento che avevo fatto --> "Anche in questa nuova versione della tua funzione LotSize, il numero di parametri e il loro ordine è cambiato un po', vero?




Non fa alcuna differenza. L'unica cosa importante è che tu passi correttamente l'ordertype alle rispettive funzioni di chiamata. Sono già codificate per fare la cosa giusta a seconda dell'ordertype. Se non mandi l'ordertype corretto alla funzione di chiamata, allora otterrai sicuramente risultati non validi dalle funzioni di chiamata stesse.


>>> OK!



Queste sono tutte buone domande, se non chiedi allora non puoi aspettarti di imparare ;)


>>> Ci sto provando! Grazie Phillip.


Shawn


 

>>> non dobbiamo includere anche il nuovo file Analyze_Currency_Symbol_2010.10.29.mqh?

Non nel tuo EA, ma hai bisogno del file nella tua directory include perché è chiamato dal file include di Trade Position Management.

Avendo #include <Trade_Position_Management_2010.10.29.mqh> nel tuo EA hai già collegato sia Trade_Position_Management_2010.10.29.mqh che Analyze_Currency_Symbol_2010.10.29.mqh.

>>>Anche in questa nuova versione della tua funzione LotSize, il numero di parametri e il loro ordine è cambiato un po', vero

Non è più necessario basare il CurrentSymbolType né il CurrentCounterPairForCross. Ora è gestito internamente.

Se guardi all'interno del file Trade Position vedrai la sezione equityatrisk e ci sono commenti riguardanti l'uso della funzione. Potrebbero aiutare, ma non sono sicuro di quanto siano autoesplicativi.

 

È un bug che è successo solo a me?
Non posso compilare nessun file con MetaEditor mq4 se metto una linea con # include.
Né sono stato in grado di compilare file mq4 che hanno una linea # include nel codice.
Abilita solo linee
# Include <stderror.mqh>
# Include <stdlib.mqh>
# Include <WinUser32.mqh>