Come codificare? - pagina 278

 

Ho fatto il backtest per 20 giorni e sembra che avrei perso soldi

Farò il backtest per un anno, vediamo

ma prima di tutto ho bisogno di sapere se posso modificare i tempi semplicemente cambiando il valore nella stringa esterna begin e nella stringa esterna end?

 

Inoltre quello che ho notato è che l'EA fa trade più volte al giorno. Quindi dobbiamo dire all'EA di fare solo un trade per il primo break out di questo range Min-Max -/+ 5 pips. Inoltre dobbiamo incorporare il trailing stop invece del solo stop loss.

Anche una domanda sui numeri. 300 non è uguale a 300 pip? Abbiamo bisogno che lo stop sia 30 pip e il take profit 50 pip. Inoltre cosa significa magis = 123?

stessa domanda per questo if(Bid<=(low-0.005)) 0.005 qui non è 50 pip?

non è extern double stopLoss = 300.0;

externdouble takeProfit = 500.0;

extern string Begin="02:00";

extern string End="10:00";

extern double distance = 80;

bool isECN = true;

bool cond = false;

bool cond2 = false;

double low;

double high;

extern double lots = 0.1;

int magic = 123;

int slippage = 1;

string comment = "";

biglietto int;

 
Avasys:
Inoltre quello che ho notato è che l'EA fa trade più volte al giorno. Quindi dobbiamo dire all'EA di fare solo un trade per il primo break out di questo range Min-Max -/+ 5 pips. Inoltre dobbiamo incorporare il trailing stop invece del solo stop loss.

Anche una domanda sui numeri. 300 non è uguale a 300 pips? Abbiamo bisogno che lo stop sia 30 pips e il take profit 50 pips. Inoltre cosa significa magis = 123?

stessa domanda per questo if(Bid<=(low-0.005)) 0.005 qui non è 50 pip?

non è extern double stopLoss = 300.0;

externdouble takeProfit = 500.0;

extern string Begin="02:00";

extern string End="10:00";

extern double distance = 80;

bool isECN = true;

bool cond = false;

bool cond2 = false;

double low;

doppio alto;

extern double lots = 0.1;

int magic = 123;

int slippage = 1;

string comment = "";

biglietto int;

[Hai ragione, dovrebbe essere 0,0005 invece di 0,005. 300 e 500 è perché uso un broker a cinque cifre, significa 300 punti, quindi 30 pips.

Per favore, dimmi che tipo di trailing stop ti serve, riguardo al numero magico. Come puoi vedere ti cambio la magia se non ti piace 123 [/lang]

File:
simple_ea.mq4  4 kb
 
g.pociejewski:
[Hai ragione, dovrebbe essere 0,0005 invece di 0,005. 300 e 500 è perché uso un broker a cinque cifre che significa 300 punti, quindi 30 pips. Per favore, dimmi che tipo di trailing stop ti serve, riguardo al numero magico. Come puoi vedere ti cambio la magia se non ti piace 123 [/lang]

Grazie

quindi questo EA ora fa scambi solo una volta al giorno, quindi la rottura dei livelli può verificarsi alcune volte nel corso della giornata, ma può scambiare solo una volta.

Anche per quanto riguarda EURJPY, dato che è una valuta di alto valore, uso ancora la stessa numerazione o sposto 00?

E posso anche cambiare o modificare i numeri di stop loss, take profit, tempi

per quanto riguarda il trailing stop. Vorrei che quando il profitto sale di 35 pips il trailing stop deve seguire per bloccare il profitto.

Quindi cosa succede se cambio qui

extern double stopLoss = 300.0; (uso un broker a 4 cifre quindi, dovrei modificare questo?)

extern double takeProfit = 500.0;

extern string Begin="0:00"; (cosa succede se voglio fare il time range 22:00 del giorno precedente e 06:00 del giorno corrente?)

extern string End="08:15";

extern double distance = 60;

bool isECN = true;

bool cond = false;

bool cond2 = false;

double low;

doppio alto;

extern double lots = 0.1;

int magic = 123;

int slippage = 1;

string comment = "";

int ticket;

Inoltre, cosa succede se cambio questo

if(Bid<=(low-0.005))

Potrebbe non influenzare la funzionalità del codice, giusto?

L'unico problema che ha quando provo a fare il backtest è che come se l'EA eseguisse pochi trade in un giorno, quindi è possibile gestire nel codice l'esecuzione di un solo trade per una coppia al giorno

 

Ciao di nuovo

OK ho scoperto che la distanza non deve essere 80 per le coppie come GBPUSD che ha un valore più basso delle coppie JPY quindi nel caso delle coppie JPY la distanza deve essere 10X rispetto alle coppie di valore basso.

e ancora, non sono riuscito a capire una cosa quando ho fatto il backtest, nel risultato si legge come se l'EA avesse scambiato più volte in un giorno sulla stessa coppia.

Quindi è possibile che se l'EA è entrato in posizione questa posizione deve essere solo una quel giorno?

grazie

Inoltre qual è il significato di quanto segue:

int slippage= 1;

string comment = "";

int ticket;

e inoltre potrei aggiungere uno script nell'EA e quando il trade viene eseguito mi viene inviato un sms o un'e-mail?

grazie

 

StopTrading per oggi, se un ordine è nella cronologia elencato

Ciao,

forse qualcuno può guidarmi a fare:

- L'ordine viene eseguito, chiuso in profitto o in perdita ed elencato nella cronologia

- ora voglio disabilitare il trading/stop aprire nuovi ordini su questa coppia (simbolo) per tutto il giorno

- il giorno successivo, un nuovo ordine può essere eseguito

è come una funzione"Max Trades Per Bar", ma basata sulla storia.

diversi frammenti di codice testati falliscono, perché mi manca la capacità di codifica estesa

esempio:

1 2008.01.07 02:36 vendere 1 0,10 1,4730 0,0000 0,0000 0,00 10000,00

2 2008.01.07 03:14 chiudere 1 0.10 1.4714 0.0000 0.0000 16.00 10016.00

3 2008.01.07 03:14 vendere 2 0.10 1.4712 0.0000 0.0000 0.0000 0.00 10016.00

4 2008.01.07 07:54 chiudere 2 0.10 1.4672 0.0000 0.0000 40.00 10056.00

5 2008.01.07 07:54 vendere 3 0.10 1.4671 0.0000 0.0000 0.0000 0.00 10056.00

6 2008.01.09 15:56 chiudere 3 0.10 1.4663 0.0000 0.0000 7.04 10063.04

7 2008.01.10 14:24 comprare 4 0.10 1.4708 0.0000 0.0000 0.0000 10063.04

8 2008.01.10 14:47 chiudere 4 0.10 1.4748 0.0000 0.0000 40.50 10103.54

qualsiasi aiuto è molto apprezzato

saluti

Michael

 
ixbone:
Ciao,

forse qualcuno può guidarmi a fare:

- L'ordine viene eseguito, chiuso in profitto o in perdita ed elencato nella storia

- ora voglio disabilitare il trading/stop aprire nuovi ordini su questa coppia (simbolo) per tutto il giorno

- il giorno successivo, un nuovo ordine può essere eseguito

è come una funzione "Max Trades Per Bar", ma basata sulla storia.

diversi frammenti di codice testati falliscono, perché mi manca la capacità di codifica estesa

esempio:

1 2008.01.07 02:36 vendere 1 0,10 1,4730 0,0000 0,0000 0,00 10000,00

2 2008.01.07 03:14 chiudere 1 0.10 1.4714 0.0000 0.0000 16.00 10016.00

3 2008.01.07 03:14 vendere 2 0.10 1.4712 0.0000 0.0000 0.0000 0.00 10016.00

4 2008.01.07 07:54 chiudere 2 0.10 1.4672 0.0000 0.0000 40.00 10056.00

5 2008.01.07 07:54 vendere 3 0.10 1.4671 0.0000 0.0000 0.0000 0.00 10056.00

6 2008.01.09 15:56 chiudere 3 0.10 1.4663 0.0000 0.0000 7.04 10063.04

7 2008.01.10 14:24 comprare 4 0.10 1.4708 0.0000 0.0000 0.0000 10063.04

8 2008.01.10 14:47 chiudere 4 0.10 1.4748 0.0000 0.0000 40.50 10103.54

qualsiasi aiuto è molto apprezzato

saluti

Michael

[Ciao Michael,

Una domanda, hai bisogno di fermare l'apertura di nuove posizioni se qualsiasi posizione nel giorno corrente è chiusa, o non si permette per esempio aprire short se qualsiasi short

è chiuso su stop? Non c'è nessun esempio di come farlo nel caso di OP_BUY (per gli altri è simile)

int time;

bool cond = true;

double stopLoss = 50;

double takeProfit = 70;

double lots = 0.1;

int orders = 0;

int magic = 123;

//+------------------------------------------------------------------+

//| funzione di inizializzazione dell'esperto |

//+------------------------------------------------------------------+

int init()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//| funzione di deinizializzazione esperto |

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//| funzione di avvio esperto |

//+------------------------------------------------------------------+

int start()

{

Stampa(countOrders(magic,OP_BUY));

if(orders !=countOrders(magic,OP_BUY)) cond = false;

if(time != DayOfWeek()) cond = true;

if(cond) {

OrderSend(Symbol(),OP_BUY,lots,Ask, 1,sltpValue(Ask - stopLoss*Point, stopLoss),sltpValue(Bid+ takeProfit*Point,takeProfit),"",magic);

}

orders = countOrders(magic,OP_BUY);

time = DayOfWeek();

//----

return(0);

}

int countOrders(int oMagic,int oType) {

int count=0;

for(int i=0;i<OrdiniTotali();i++) {

if(OrderSelect(i,SELECT_BY_POS)) {

if(OrderMagicNumber()==oMagic) {

if(OrderSymbol()==Symbol()) {

if(OrderType()==oType || oType<0) {

count++;

}

}

}

}

}

return(count);

}

double sltpValue(double w1, int w2){

if(w2 == 0)

return (0);

return (NormalizeDouble(w1, Digits));

}

//+------------------------------------------------------------------+

Spero che sia chiaro. In caso di domande contattatemi per favore.

Saluti,

Grzesiek[/lang]

 

Ciao Grzesiek

sì, solo fermare l'apertura di nuove posizioni nel giorno corrente, non importa se comprare, vendere, in sospeso o cancellato:

- se un ordine viene chiuso in profitto, in perdita, cancellato o in sospeso cancellato e annotato nella cronologia - non sono permesse nuove operazioni di nessun tipo per questo simbolo() nel giorno corrente

- se abbiamo un nuovo giorno, tutti i tipi di nuovi ordini possono essere eseguiti.

Quello che ho fatto non funziona:

extern bool Only1OrderPerDay=true;

if(Only1OrderPerDay==true){

CountHistoryOrders();

}

void CountHistoryOrders(){

for(int d=0;d<OrdersHistoryTotal();d++){

OrderSelect(d,SELECT_BY_POS,MODE_HISTORY);{

if(OrderSymbol()==Symbol() && (OrderMagicNumber()==Magic || Magic==0))d++;

Print("HistoryOrders "+DoubleToStr(d,0));

{

if(d>0 ....time?...){

return;

}}}}}

grazie per l'aiuto

Michael

g.pociejewski:
[lang=pl] Ciao Michael,

Una domanda, hai bisogno di fermare l'apertura di nuove posizioni se qualsiasi posizione nel giorno corrente è chiusa, o non si permette per esempio aprire short se qualsiasi short

è chiuso su stop? Non c'è nessun esempio di come farlo nel caso di OP_BUY (per altri è simile)

int time;

bool cond = true;

double stopLoss = 50;

double takeProfit = 70;

double lots = 0.1;

int orders = 0;

int magic = 123;

//+------------------------------------------------------------------+

//| funzione di inizializzazione dell'esperto |

//+------------------------------------------------------------------+

int init()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//| funzione di deinizializzazione esperto |

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//| funzione di avvio esperto |

//+------------------------------------------------------------------+

int start()

{

Stampa(countOrders(magic,OP_BUY));

if(orders !=countOrders(magic,OP_BUY)) cond = false;

if(time != DayOfWeek()) cond = true;

if(cond) {

OrderSend(Symbol(),OP_BUY,lots,Ask, 1,sltpValue(Ask - stopLoss*Point, stopLoss),sltpValue(Bid+ takeProfit*Point,takeProfit),"",magic);

}

orders = countOrders(magic,OP_BUY);

time = DayOfWeek();

//----

return(0);

}

int countOrders(int oMagic,int oType) {

int count=0;

for(int i=0;i<OrdiniTotali();i++) {

if(OrderSelect(i,SELECT_BY_POS)) {

if(OrderMagicNumber()==oMagic) {

if(OrderSymbol()==Symbol()) {

if(OrderType()==oType || oType<0) {

count++;

}

}

}

}

}

return(count);

}

double sltpValue(double w1, int w2){

if(w2 == 0)

return (0);

return (NormalizeDouble(w1, Digits));

}

//+------------------------------------------------------------------+

Spero che sia chiaro. In caso di domande contattatemi per favore.

Grazie,

Grzesiek[/lang]
 

Trascinare e rilasciare lo stop loss

Ciao

Ho lo script Drag and Drop Stop loss, e mi piace usarlo. Ma con il mio broker non funziona per 2 ordini in uno stesso scart solo impostare 1 ordine. Voglio impostare lo stop loss per 2 ordini nello stesso posto.

Qual è il problema? Funziona bene per altri broker.

Per favore aiutatemi

int start()

{

//----

int digits = MarketInfo(Symbol(),MODE_DIGITS);

double value = NormalizeDouble(WindowPriceOnDropped(),digits);

for(int i=OrdersTotal()-1;i>=0;i--)

{

if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

continuare;

if(OrderSymbol()!=Symbol())

continua;

RefreshRates();

se(TipoOrdine()==OP_BUY)

se(valore<Bid)

OrderModify(OrderTicket(),OrderOpenPrice(),value, OrderTakeProfit(),OrderExpiration(),White);

if(OrderType()==OP_SELL)

if(value>Ask)

OrderModify(OrderTicket(),OrderOpenPrice(),value, OrderTakeProfit(),OrderExpiration(),White);

if((OrderType()==OP_BUYSTOP) || (OrderType()==OP_BUYLIMIT))

if(value<OrderOpenPrice())

OrderModify(OrderTicket(),OrderOpenPrice(),value, OrderTakeProfit(),OrderExpiration(),White);

if((OrderType()==OP_SELLSTOP) || (OrderType()==OP_SELLLIMIT))

if(value>OrderOpenPrice())

OrderModify(OrderTicket(),OrderOpenPrice(),value, OrderTakeProfit(),OrderExpiration(),White);

}

return(0);

}

//+------------------------------------------------------------------+

 

Come posso trovare la posizione X Y co ordinata di due indicatori dissimili in un EA per comprare e vendere dove la croce

diciamo un Macd e un altro indicatore nella stessa sottofinestra?

Motivazione: