Aiuto per la codifica - pagina 157

 
mladen:
Christoff

In questo modo la variabile Decimali dovrebbe essere OK

In ogni caso, controlla quale codice di errore stai ottenendo in caso di chiusura (parziale) dell'ordine non riuscita

Mladen,

Grazie per il suggerimento.

Il problema è che non c'è nessun messaggio di errore. Quando non funziona, sembra che la funzione PartialTP non sia stata nemmeno chiamata. Altre volte - di solito ai primi ordini dopo il riavvio dell'EA - funziona bene.

Ho pensato che forse una delle variabili non torna al valore zero, o qualcosa del genere, ma non riesco ancora a trovare il bug.

 
chrisstoff:
Mladen,

Grazie per il suggerimento.

Il problema è che non c'è nessun messaggio di errore. Quando non funziona, sembra che la funzione PartialTP non sia stata nemmeno chiamata. Altre volte - di solito ai primi ordini dopo il riavvio dell'EA - funziona bene.

Ho pensato che forse una delle variabili non torna al valore zero, o qualcosa del genere, ma non riesco ancora a trovare il bug.

chrisstoff

Mi dispiace, ma con un codice parziale non posso aiutare di più

Quello che stai descrivendo significa che c'è la necessità di eseguire il debug del codice - e questo può essere fatto solo eseguendolo mentre si utilizza una sorta di punti di controllo

 
mladen:
chrisstoff

Mi dispiace, ma con un codice parziale non posso aiutare più

Quello che stai descrivendo significa che c'è la necessità di eseguire il debug del codice - e questo può essere fatto solo eseguendolo mentre si utilizzano alcuni punti di controllo

Grazie, Mladen.

È rassicurante che tu non abbia visto problemi nel codice.

Penso che tutte le parti rilevanti del codice siano state postate, quindi devo trovare il bug altrove.

 
mladen:
garretto87

Si prega di leggere il post sopra il tuo per una soluzione di questo problema

Il codice completo per questo è il seguente:

int TotalOrders = 0;

for (int i=0; i <= OrdersTotal(); i++)

{

if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

if (OrderSymbol() == Symbol())

TotalOrders++;

}

if (TotalOrders<1)

{

ticket=OrderSend(Symbol(), OP_BUY, lots, Ask, 3, 0, 0);

stop=(Ask-stopsize*Point);

prof=(Ask+profsize*Point);

OrderModify( ticket, OrderOpenPrice(), stop, prof, 0, Blue);

}

Malden,

Se voglio aprire i lotti a una percentuale del saldo del mio conto, come codificare?

Esempio:

Il saldo del mio conto è di 500$,

voglio aprire un lotto con il 5%, poi conta automaticamente e apre i lotti da $0.25, TP=10 SL=20.

Come codificarlo?

Grazie.

 
hock87:
Malden,

Se voglio aprire i lotti a una percentuale del saldo del mio conto, come codificarlo?

Esempio:

Il saldo del mio conto è di $500,

voglio aprire un lotto con il 5%, poi conta automaticamente e apre i lotti da $0.25, TP=10 SL=20.

Come codificarlo?

Grazie.

Puoi usare una funzione come questa per questo:

double getLots(double stopLoss, double risk)

{

RefreshRates();

double pPoint = MarketInfo(Symbol(),MODE_POINT);

double step = MarketInfo(Symbol(),MODE_LOTSTEP);

double minLot = MarketInfo(Symbol()l,MODE_MINLOT);

double maxLot = MarketInfo(Symbol(),MODE_MAXLOT);

double lots = minLot;

if (risk>0 && stopLoss>0)

{

lots = AccountFreeMargin()*(risk/100.0)/(stopLoss*MarketInfo(s_symbol,MODE_TICKVALUE)/pPoint);

}

}

return(MathMax(MathMin(lots,maxLot),minLot));

}

PS: stopLoss deve essere già passato alla funzione in pip/punti (non in valori interi)

 
mladen:
Puoi usare una funzione come questa per questo:
double getLots(double stopLoss, double risk)

{

RefreshRates();

double pPoint = MarketInfo(Symbol(),MODE_POINT);

double step = MarketInfo(Symbol(),MODE_LOTSTEP);

double minLot = MarketInfo(Symbol()l,MODE_MINLOT);

double maxLot = MarketInfo(Symbol(),MODE_MAXLOT);

double lots = minLot;

if (risk>0 && stopLoss>0)

{

lots = AccountFreeMargin()*(risk/100.0)/(stopLoss*MarketInfo(s_symbol,MODE_TICKVALUE)/pPoint);

}

}

return(MathMax(MathMin(lots,maxLot),minLot));

}

PS: stopLoss deve essere già passato alla funzione in pip/punti (non in valori interi)

Grazie, Mladen.

Ma non sono riuscito a comporre il codice per comprare il codice dell'ordine.

Appaiono molti errori e avvisi.

Come comporre il codice?

Grazie.

extern double lots = 0.1;extern double stopsize = 20;

extern double profsize = 10;

int err;

int ticket;

double stop;

double prof;

int start()

{

int TotalOrders = 0;

for (int i=0; i <= OrdersTotal(); i++)

{

if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

if (OrderSymbol() == Symbol())

TotalOrders++;

}

if (TotalOrders<1)

{

ticket=OrderSend(Symbol(), OP_BUY, lots, Ask, 3, 0, 0, NULL,LimeGreen);

stop=(Ask-stopsize*Point);

prof=(Ask+profsize*Point);

OrderModify( ticket, OrderOpenPrice(), stop, prof, 0, Blue);

}

err=GetLastError();

// Comment("This is a test ", err, " ", stop, " ", prof);

Comment(" ");

}
 
hock87:
Grazie, Mladen.

Ma non sono riuscito a comporre il codice per comprare il codice dell'ordine.

Appaiono molti errori e avvertimenti.

Come comporre il codice?

Grazie.

extern double lots = 0.1;extern double stopsize = 20;

extern double profsize = 10;

int err;

int ticket;

double stop;

double prof;

int start()

{

int TotalOrders = 0;

for (int i=0; i <= OrdersTotal(); i++)

{

if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

if (OrderSymbol() == Symbol())

TotalOrders++;

}

if (TotalOrders<1)

{

ticket=OrderSend(Symbol(), OP_BUY, lots, Ask, 3, 0, 0, NULL,LimeGreen);

stop=(Ask-stopsize*Point);

prof=(Ask+profsize*Point);

OrderModify( ticket, OrderOpenPrice(), stop, prof, 0, Blue);

}

err=GetLastError();

// Comment("This is a test ", err, " ", stop, " ", prof);

Comment(" ");

}

Prova così (l'ho testato ora e funziona):

extern double lots = 0.1;extern double stopsize = 20;

extern double profsize = 10;

int err;

int ticket;

double stop;

double prof;

int init() { return(0); }

int deinit() { return(0); }

int start()

{

int TotalOrders = 0;

for (int i=0; i <= OrdersTotal(); i++)

{

if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

if (OrderSymbol() == Symbol())

TotalOrders++;

}

if (TotalOrders<1)

{

ticket=OrderSend(Symbol(), OP_BUY, lots, Ask, 3, 0, 0, NULL,LimeGreen);

stop=(Ask-stopsize*Point*MathPow(10,Digits%2));

prof=(Ask+profsize*Point*MathPow(10,Digits%2));

OrderModify( ticket, OrderOpenPrice(), stop, prof, 0, Blue);

}

err=GetLastError();

// Comment("This is a test ", err, " ", stop, " ", prof);

Comment(" ");

}
File:
_test_1.mq4  1 kb
test_1.gif  78 kb
 

caro mladen e mr. tools pls,

è possibile creare un ea che dia un segnale basato su certe condizioni come i segnali di 3 o 4 indicatori che soddisfano condizioni predefinite.

per esempio

voglio che l'ea segnali un buy hwen:

ema 8 croce ema 21

qqe sopra 0

non lag ma è verde

e la candela è sopra la nuvola ichimoku

l'EA non dovrebbe aprire operazioni ma solo dare il segnale quando le condizioni indicate sono soddisfatte

 

Grazie, Mladen.

L'ho provato.

ma apre ancora i lotti con $0.1

Voglioaprire lotti a una percentuale del saldo delmio conto.

EX: il saldo del conto ha $500.

aprire un lotto con il 5%, poi conta automaticamente e apre i lotti da $0.25, TP=10 SL=20.

LotSizeSlot1 = AccountBalance() * (RiskSlot1 / 100)

Dimensione lotto1 = $500*(5%/100)

Dimensione lotto1 = $ 0.25

Poi apre automaticamente lotti da 0,25$ e TP=10 SL=20.

Come crearlo?

Grazie.

 
hock87:
Grazie, Mladen.

Ho provato.

ma continua ad aprire i lotti con $0.1

Voglio aprire ilotti ad una percentuale del mio saldo del conto.

EX: il saldo del conto ha $500.

aprire un lotto con il 5%, poi conta automaticamente e apre i lotti da $0.25, TP=10 SL=20.

LotSizeSlot1 = AccountBalance() * (RiskSlot1 / 100)

Dimensione lotto1 = $500*(5%/100)

Dimensione lotto1 = $ 0.25

Poi apre automaticamente lotti da 0,25$ e TP=10 SL=20.

Come crearlo?

Grazie.

Come in quello allegato

File:
_test_2.mq4  2 kb