Come codificare? - pagina 267

 
christinaLi:
Vorrei aiutare con questa funzione di cui parli, ma sembra che non riesca semplicemente a capire la tua logica. Questo non ha davvero nulla a che fare con l'altra logica della strategia.

Vorrei semplicemente sapere questo.

Se hai 1 lotto di acquisto a 1.4110 e 2 lotti di vendita a 1.4200. A quale prezzo pensi di avere 6 pips di guadagno?

Ciao Christina,

nella mia gestione delle posizioni mai, il 1 lotto di acquisto chiude con profitto, prima che 2 lotti di vendita sono aperti.(non vende mai perché 1 lotto di acquisto chiuso in profitto, aspettare il prossimo segnale)

ritorno al tuo esempio:

ma c'è una linea a circa 1.4175, dove 2 lotti di vendita (profitto su, mercato giù) e 1 lotto di acquisto (profitto giù, mercato giù) sono prezzo uguale (breakeven 0), quindi a 1.4169 6 pips profitto sono pronti - poi vorrei chiudere tutti gli ordini

IX

 
ixbone:
Ciao Christina,

nella mia gestione delle posizioni mai, il 1 lotto di acquisto chiude con profitto, prima che 2 lotti di vendita siano aperti.(non vende mai perché il 1 lotto di acquisto ha chiuso in profitto, aspetta il prossimo segnale)

ritorno al tuo esempio:

ma c'è una linea a circa 1.4175, dove 2 lotti di vendita (profitto su, mercato giù) e 1 lotto di acquisto (profitto giù, mercato giù) sono prezzo uguale (breakeven 0), quindi a 1.4169 6 pips di profitto sono pronti - poi vorrei chiudere tutti gli ordini

IX

Perché il mio esempio è 1,4110 e 1,4200. Ecco il mio calcolo:

Prima di tutto, a 1.4170 (senza considerare gli spread) siamo in pareggio. Ora abbiamo 2 lotti di vendita in guadagno a 30 pips ciascuno e 1 lotto di acquisto in perdita di 60 pips, quindi break even in termini di dollari.

Se esattamente con il mio esempio, dovresti avere 6 pip di guadagno complessivo a 1.4164.

A 1.4164 (senza considerare gli spreads) abbiamo 2 lotti di vendita con un guadagno di 36 pips ciascuno e 1 lotto di acquisto con una perdita di 54 pips, quindi un guadagno di 72 pips dalle vendite e una perdita di 54 pips dagli acquisti. Complessivamente per il gruppo di trade, hai 3 lotti con un guadagno di 18 pip. Quindi è più ragionevole considerare che ora hai un guadagno di 6 pip.

Tuttavia le cose saranno di nuovo complicate a causa degli spread. Perché se il bid è 1.4164, l'ask forse 1.4166, quindi le tue vendite hanno solo 34 pip di guadagno ciascuna. Complessivamente per il gruppo di trade, hai 3 lotti con un guadagno di 14 pip. Quindi ora di fatto hai 4.7 pip di guadagno.

Se porto questo esempio un passo avanti, se abbiamo 2 buy e 3 sell. Allora a 1.4164 sei in pareggio.

Se non dobbiamo considerare gli spreads, allora abbiamo bisogno di 30 pips di guadagno totale per avere 5 pips di guadagno su ogni lotto. Quindi il guadagno di 6 pip sarebbe al prezzo di 1.4134, è corretto?

Il tuo sistema probabilmente non avrà questo tipo di situazione, è il principio che voglio ottenere. Sei d'accordo con il calcolo di cui sopra?

 
christinaLi:
Perché il mio esempio è 1.4110 e 1.4200. Ecco il mio calcolo:

Prima di tutto, a 1.4170 (senza considerare gli spread) siamo in pareggio. Ora abbiamo 2 lotti di vendita in guadagno a 30 pips ciascuno e 1 lotto di acquisto in perdita di 60 pips, quindi break even in termini di dollari.

Se esattamente con il mio esempio, dovresti avere 6 pip di guadagno complessivo a 1.4164.

A 1.4164 (senza considerare gli spreads) abbiamo 2 lotti di vendita con un guadagno di 36 pips ciascuno e 1 lotto di acquisto con una perdita di 54 pips, quindi un guadagno di 72 pips dalle vendite e una perdita di 54 pips dagli acquisti. Complessivamente per il gruppo di trade, hai 3 lotti con un guadagno di 18 pip. Quindi è più ragionevole considerare che ora hai un guadagno di 6 pip.

Tuttavia le cose saranno di nuovo complicate a causa degli spread. Perché se il bid è 1.4164, l'ask forse 1.4166, quindi le tue vendite hanno solo 34 pip di guadagno ciascuna. Complessivamente per il gruppo di trade, hai 3 lotti con un guadagno di 14 pip. Quindi ora di fatto hai 4.7 pip di guadagno.

Se porto questo esempio un passo avanti, se abbiamo 2 buy e 3 sell. Allora a 1.4164 sei in pareggio.

Se non dobbiamo considerare gli spreads, allora abbiamo bisogno di 30 pips di guadagno totale per avere 5 pips di guadagno su ogni lotto. Quindi il guadagno di 6 pip sarebbe al prezzo di 1.4134, è corretto?

Il vostro sistema probabilmente non avrà questo tipo di situazione, è il principio che voglio ottenere. Sei d'accordo con il calcolo di cui sopra?

Christina,

sono d'accordo, hai ragione al 100% con entrambi i calcoli!

 

Ciao, Michael,

Sono troppo occupato negli ultimi due giorni, ho già fatto questo ma ha bisogno di più tempo per metterlo insieme. Lo posterò qui una volta che avrò trovato un po' di tempo per farlo nei prossimi giorni. Chrisitna

 
 
christinaLi:
Ciao, Michael, sono troppo occupato negli ultimi due giorni, ho già fatto questo ma ha bisogno di più tempo per metterlo insieme. Lo posterò qui una volta che avrò trovato un po' di tempo per farlo nei prossimi giorni. Chrisitna

Ciao Christina,

nessun problema, prenditi il tuo tempo, apprezzo sempre i tuoi suggerimenti!

Michael

 
 

ho bisogno di aiuto

Ciao a tutti!

Questa è la mia idea: ho bisogno di 2 buffer di indicatori in separate_window, 1 è devupBuffer[]; 2 è devdwBuffer[]. Per esempio se hanno cinque digitali 1,2,3,4,5 che media è3.Allora i dati sono maggiori della media di 3 4 e 5 devupBuffer={【(4-media)*(4-media)】+【(5-media)*(5-media)】}/deviazione standard(1,2,3,4,5)*deviazione standard(1,2,3,4,5).I dati sono inferiori alla media di 3 1 e 2 devdwBuffer={【(1-media)*(1-media)】+【(2-media)*(2-media)】}/deviazione standard(1,2,3,4,5)*deviazione standard(1,2,3,4,5).

 

perché questo EA non può comprare o vendere?

Ciao, sono davvero nuovo in questa programmazione con Meta... per favore aiutatemi...

Sto lavorando con un sistema su Stocastico con due livelli, 25 e 75...

Un solo trade...

se il MAIN e il SIGNAL sono entrambi sotto il 25 e si incrociano, COMPRO.

se il MAIN e il SIGNAL si incrociano sopra il 25, CHIUDI ACQUISTO.

se il MAIN e il SIGNAL sono entrambi sopra 75 e si incrociano, VENDERE.

se il MAIN e il SIGNAL si incrociano (non è necessario che siano sotto 75), CHIUDI VENDITA.

questo è tutto...

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

//| StochCross.mq4 |

//| RobertEli |

//| http://www.metaquotes.net |

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

#property copyright "RobertEli"

#property link "http://www.metaquotes.net"

//--- input parameters

extern double TakeProfit=250.0;

extern double Lots=0.01;

extern double TrailingStop=35.0;

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

//| expert initialization function |

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

int init()

{

//----

//----

return(0);

}

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

//| expert deinitialization function |

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

int deinit()

{

//----

//----

return(0);

}

int Confirm (double line1, double line2, int level_buy, int level_sell)

{

static int confirmation = 0;

if ((line1 < level_buy) && (line2 < level_buy)) confirmation = 1; //confirm BUY, when two lines are below level_buy

if ((line1 > level_sell) && (line2 > level_sell)) confirmation = 2; //confirm SELL, when two lines are above level_sell

if ((line1 > level_buy) && (line2 > level_buy)) confirmation = 3; //confirm CLOSE BUY, when two lines are above level_buy

if ((line1 < level_sell) && (line2 < level_sell)) confirmation = 4; //confirm CLOSE SELL, when two lines are below level_sell

//if ((line1 > level_buy_close) && (line2 > level_buy_close)) confirmation = 3; //confirm CLOSE BUY

//if ((line1 < level_sell_close) && (line2 < level_sell_close)) confirmation = 4; //confirm CLOSE SELL

//else return (0);

return (confirmation);

}

int Crossed (double line1, double line2)

{

static int last_direction = 0;

static int current_direction = 0;

if (line1 > line2) current_direction = 1; //UP

if (line1 < line2) current_direction = 2; //DOWN

if (current_direction != last_direction) //changed direction

{

last_direction = current_direction;

return (last_direction);

}

else

{

return (0);

}

}

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

//| expert start function |

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

int start()

{

//----

int cnt, ticket;

double Stoch_main, Stoch_sign;

if (Bars < 100)

{

Print("BARS less than 100");

return (0);

}

if (TakeProfit < 10)

{

Print("TakeProfit less than 10");

return (0);

}

/*

Stoch_main = iStochastic (NULL,15,21,8,13,MODE_SMA,1,MODE_MAIN,0);

Stoch_sign = iStochastic (NULL,15,21,8,13,MODE_SMA,1,MODE_SIGNAL,0);

*/

Stoch_main = iStochastic (NULL,0,30,20,12,MODE_SMA,1,MODE_MAIN,0);

Stoch_sign = iStochastic (NULL,0,30,20,12,MODE_SMA,1,MODE_SIGNAL,0);

/*

Stoch_main = iMA(NULL,0,8,0,MODE_EMA,PRICE_CLOSE,0);

Stoch_sign = iMA(NULL,0,13,0,MODE_EMA,PRICE_CLOSE,0);

*/

int isCrossed = Crossed(Stoch_main,Stoch_sign);

int isConfirmed = Confirm(Stoch_main,Stoch_sign,25,75);

int total = OrdersTotal();

if (total == 0)

{

if ((isCrossed == 1) && (isConfirmed == 1))

{

ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,"Buy at " + Ask,24848,0,Green);

if (ticket > 0)

{

if (OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY Order opened: " +Ask ,OrderOpenPrice());

else Print ("Error Opening BUY Order: ", GetLastError());

return (0);

}

}

if ((isCrossed == 2) && (isConfirmed == 2))

{

ticket = OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,"Sell at " + Bid,24848,0,Red);

if (ticket > 0)

{

if (OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL Order opened: " +Bid ,OrderOpenPrice());

else Print ("Error Opening SELL Order: ", GetLastError());

return (0);

}

}

return (0);

}

else

{

for (cnt = total; cnt < 0; cnt++)

{

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

if (OrderType() <= OP_SELL && OrderSymbol() == Symbol())

{

if (OrderType() == OP_BUY) //the trade was a Buy position

{ //check for closing)

if ((isCrossed == 2) && (isConfirmed == 3))

//if (isCrossed == 2)

{ //change of direction

OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); //close Buy position

return (0);

}

}

else // the trade was a SELL position

{

//should it be closed?

//if ((isCrossed == 1) && (isConfirmed == 4))

if (isCrossed == 1) //Closing the SELL need not to be below the level_buy... it's very dangerous to wait for it...

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); //Sell position is now closed

return (0);

}

}

}

}

}

//----

return(0);

}

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

EA non riesce a fare quello che dovrebbe fare, AIUTO!

ciao, sono davvero nuovo in questa programmazione di mq4 ma ho letto i tutorial di codersgurus (grazie mille!) quindi penso di poter capire qualcosa... Comunque, ho fatto questo EA che si basa su MOVING AVERAGES... MA NON FUNZIONA TERRIBILMENTE COME DOVREBBE!

le regole qui sono molto semplici...

1. 1. MA_04_1H (significa media mobile periodo 4 per timeframe 1 ora) incrocia sopra MA_14_1H,

confermalo con MA_04_4H che è sopra MA_14_4H (la tendenza è al rialzo) ------> COMPRA!

2. MA_04_1H incrocia sotto MA_14_1H,

confermalo con MA_04_4H sotto MA_14_4H (la tendenza è al ribasso) ------> VENDI!

3. quando MA_04_1H incrocia il MA_14_1H, chiudi quell'ordine (può iniziare un nuovo ordine date le regole #1 e #2)

4. un solo trade... (se COMPRARE, chiudere quel COMPRARE. dopo di che, VENDERE se necessario)

Ho creato 2 funzioni: Incrociato e Confermato.

Incrociata è per il timeframe di 1 ora.

Confirmed è per il timeframe a 4 ore.

qualcuno può aiutarmi a fare il debug di questa cosa?

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

//| MACross1TradeOnly.mq4 |

//| RobertEli |

//| |

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

// this will work on MA_04, and MA__14

#property copyright "RobertEli"

#property link ""

extern double Lots = 0.01;

extern int stoploss_value = 10; // $10

bool up = 0, //UP direction, when MA_04 is above MA_14

down = 0, //DOWN direction, when MA_14 is above MA_04

change = 0, //when the MA_04 and MA_14 cross

firsttime = true; //first time for direction_prev

int direction_curr = 0; // 1 if UP, 2 if down...

int direction_prev = 0; // this will hold previous value of direction_curr

int direction_trend= 0; // trend direction for confirmation

int cross = 0; // if direction_curr and direction_prev changes course

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

//| expert initialization function |

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

int init()

{

//----

//----

return(0);

}

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

//| expert deinitialization function |

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

int deinit()

{

//----

//----

return(0);

}

int Crossed (double line1, double line2)

{

static int last_direction = 0;

static int current_direction = 0;

if (line1 - line2 > 0)//(line1 > line2)

{

current_direction = 1; //UP

if (firsttime == true)

{

current_direction = 0;

last_direction = 1;

firsttime = false;

return (0);

}

}

if (line1 - line2 < 0)//(line1 < line2)

{

current_direction = 2; //DOWN

if (firsttime == true)

{

current_direction = 0;

last_direction = 2;

firsttime = false;

return (0);

}

}

if ((current_direction != last_direction) && (firsttime == false)) //changed direction

{

last_direction = current_direction;

return (last_direction);

}

else

{

return (last_direction);

}

}

int Confirmed (double line1, double line2)

{

int trend;

if (line1 > line2) trend = 1; // trend direction is UP

if (line1 < line2) trend = 2; // trend direction is DOWN

return (trend);

}

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

//| expert start function |

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

int start()

{

//----

int cnt,ticket, total;

//double MA_04, MA_07 , MA_14 , MA_21 , MA_28; //MOVING AVERAGES with their corresponding period

if (Bars < 100) { Print ("Bars less than 100."); return (0); }

double MA_04_1H = iMA(NULL,60,04,0,MODE_EMA,PRICE_CLOSE,0);

double MA_14_1H = iMA(NULL,60,14,0,MODE_EMA,PRICE_CLOSE,0);

double MA_04_4H = iMA(NULL,240,04,0,MODE_EMA,PRICE_CLOSE,0);

double MA_14_4H = iMA(NULL,240,14,0,MODE_EMA,PRICE_CLOSE,0);

//double stoploss = stoploss_value / (Lots * 100000);

//new code from v_1

cross = Crossed (MA_04_1H,MA_14_1H); // =1 for UP, =2 for DOWN

direction_trend = Confirmed (MA_04_4H, MA_14_4H); // =1 for UP, =2 for DOWN

total = OrdersTotal();

if (total == 0)

{

if((cross == 1) && (direction_trend == 1))

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,/*Ask-stoploss*/0,0,"Buy at: "+ Ask,12345,0,Green);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice(),",<<<<",OrderStopLoss());

}

else Print("Error opening BUY order : ",GetLastError());

cross = 0;

return(0);

}

if((cross == 2) && (direction_trend == 2))

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,/*Bid+stoploss*/0,0,"Sell at: "+ Bid,12345,0,Red);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());

}

else Print("Error opening SELL order : ",GetLastError());

cross = 0;

return(0);

}

}

if (total == 1)

{

for(cnt=0;cnt<total;cnt++)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

// bool no_buy_sell = ((OrderTakeProfit() 0));

if ((OrderType()==OP_BUY) && (cross == 2) )// && (no_buy_sell))

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close position

//OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+stoploss,0,"Sell at: "+ Bid,12345,0,Red);

return (0);

}

else if ((OrderType()==OP_SELL) && (cross == 1) )// && (no_buy_sell))

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // close position

//OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-stoploss,0,"Buy at: "+ Ask,12345,0,Green);

return (0);

}

}

}

else return (0);

//----

return(0);

}

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

per favore ignorate il mio post precedente... ho cestinato quell'idea... sto lavorando su questo ora... quindi per favore aiutatemi...