Comment coder ? - page 267

 
christinaLi:
J'aimerais vous aider avec cette fonction dont vous parlez mais il semble que je ne puisse pas simplement comprendre votre logique. Cela n'a vraiment rien à voir avec les autres logiques de la stratégie.

J'aimerais simplement le savoir.

Si vous avez 1 lot d'achat à 1,4110 et 2 lots de vente à 1,4200. A quel prix pensez-vous avoir un gain de 6 pips ?

Bonjour Christina,

dans ma gestion de position jamais, le 1 lot d'achat ferme avec profit, avant que 2 lots de vente sont ouverts.(vend jamais parce que le 1er lot d'achat a fermé en profit, attendre le prochain signal)

Revenons à votre exemple :

mais il y a une ligne à environ 1.4175, où 2 lots de vente (profit à la hausse, marché à la baisse) et 1 lot d'achat (profit à la baisse, marché à la baisse) sont à prix égal (breakeven 0), donc à 1.4169 6 pips de profit sont prêts - alors je fermerais tous les ordres.

IX

 
ixbone:
Salut Christina,

dans ma gestion de position jamais, le 1 lot d'achat ferme avec profit, avant que 2 lots de vente sont ouverts.(vend jamais parce que le 1er lot d'achat a fermé en profit, attendre le prochain signal)

Revenons à votre exemple :

mais il y a une ligne à environ 1.4175, où 2 lots de vente (profit à la hausse, marché à la baisse) et 1 lot d'achat (profit à la baisse, marché à la baisse) sont à prix égal (breakeven 0), donc à 1.4169 6 pips de profit sont prêts - alors je fermerais tous les ordres.

IX

Parce que mon exemple est 1.4110 et 1.4200. Voici mon calcul :

Tout d'abord, à 1,4170 (sans tenir compte des spreads), nous sommes à l'équilibre. Maintenant, nous avons 2 lots de vente à gain à 30 pips chacun et 1 lot d'achat à perte de 60 pips, donc break even en termes de dollars.

Si vous suivez exactement mon exemple, vous devriez avoir 6 pips de gain global à 1,4164.

À 1,4164 (sans tenir compte des spreads), nous avons 2 lots de vente à un gain de 36 pips chacun et 1 lot d'achat à une perte de 54 pips, soit un gain de 72 pips pour les ventes et une perte de 54 pips pour les achats. Globalement pour le groupe de transactions, vous avez 3 lots avec un gain de 18 pips. Il est donc plus raisonnable de considérer que vous avez maintenant un gain de 6 pips.

Cependant, les choses vont se compliquer à nouveau à cause des spreads. Car si l'offre est de 1,4164, la demande peut être de 1,4166, vos ventes n'ont donc qu'un gain de 34 pips chacune. Au total, pour le groupe de transactions, vous avez 3 lots avec un gain de 14 pips. Donc, en fait, vous avez maintenant un gain de 4,7 pips.

Si je prends cet exemple un peu plus loin, si nous avons 2 achats et 3 ventes. Alors à 1,4164 vous êtes quitte.

Si nous n'avons pas à considérer les spreads, alors nous avons besoin de 30 pips de gain total pour avoir 5 pips de gain sur chaque lot. Donc, le gain de 6 pips serait au prix de 1,4134, est-ce correct ?

Votre système n'aura probablement pas ce genre de situation, c'est le principe que je veux obtenir. Êtes-vous d'accord avec le calcul ci-dessus ?

 
christinaLi:
Parce que mon exemple est 1.4110 et 1.4200. Voici mon calcul :

Tout d'abord, à 1,4170 (sans tenir compte des spreads), nous sommes à l'équilibre. Maintenant nous avons 2 lots de vente à gain de 30 pips chacun et 1 lot d'achat à perte de 60 pips, donc break even en termes de dollars.

Si vous suivez exactement mon exemple, vous devriez avoir 6 pips de gain global à 1,4164.

À 1,4164 (sans tenir compte des spreads), nous avons 2 lots de vente à un gain de 36 pips chacun et 1 lot d'achat à une perte de 54 pips, soit un gain de 72 pips pour les ventes et une perte de 54 pips pour les achats. Globalement pour le groupe de transactions, vous avez 3 lots avec un gain de 18 pips. Il est donc plus raisonnable de considérer que vous avez maintenant un gain de 6 pips.

Cependant, les choses vont se compliquer à nouveau à cause des spreads. Car si l'offre est de 1,4164, la demande peut être de 1,4166, vos ventes n'ont donc qu'un gain de 34 pips chacune. Au total, pour le groupe de transactions, vous avez 3 lots avec un gain de 14 pips. Donc, en fait, vous avez maintenant un gain de 4,7 pips.

Si je prends cet exemple un peu plus loin, si nous avons 2 achats et 3 ventes. Alors à 1,4164 vous êtes quitte.

Si nous n'avons pas à considérer les spreads, alors nous avons besoin de 30 pips de gain total pour avoir 5 pips de gain sur chaque lot. Le gain de 6 pips serait donc au prix de 1,4134, est-ce correct ?

Votre système n'aura probablement pas ce genre de situation, c'est le principe que je veux obtenir. Êtes-vous d'accord avec le calcul ci-dessus ?

Christina,

Je suis d'accord, vous avez 100% raison avec les deux calculs !

 

Salut, Michael,

Je suis bien trop occupé ces deux derniers jours, j'ai déjà fait cela mais j'ai besoin de plus de temps pour le mettre en place. Je le posterai ici dès que j'aurai trouvé le temps de le faire dans les prochains jours. Chrisitna

 
 
christinaLi:
Bonjour, Michael, je suis bien trop occupé ces derniers jours, j'ai déjà fait cela mais j'ai besoin de plus de temps pour le mettre en place. Je le posterai ici dès que j'aurai trouvé le temps de le faire dans les prochains jours. Chrisitna

Bonjour Christina,

pas de problème, prenez votre temps, j'apprécie toujours vos suggestions !

Michael

 
 

j'ai besoin d'aide

Bonjour à tous !

Voici mon idée:i besoin de 2 buffers d'indicateurs dans une fenêtre séparée,1 est devupBuffer[];2 est devdwBuffer[]. Par exemple, si j'ai cinq numériques 1,2,3,4,5, leur moyenne est de 3.Alors la donnée est supérieure à la moyenne de 3 4 et 5 devupBuffer={【(4-moyenne)*(4-moyenne)】+【(5-moyenne)*(5-moyenne)】}/écart-type(1,2,3,4,5)*écart-type(1,2,3,4,5).Les données sont inférieures à la moyenne de 3 1 et 2 devdwBuffer={【(1-average)*(1-average)】+【(2-moyenne)*(2-moyenne)】}/écart-type(1,2,3,4,5)*écart-type(1,2,3,4,5).

 

pourquoi cette EA ne peut-elle pas acheter ou vendre ?

Bonjour, je suis vraiment nouveau dans cette programmation avec Meta... aidez-moi s'il vous plaît...

Je travaille avec un système sur Stochastics avec deux niveaux, 25 et 75...

UN seul trade...

si le MAIN et le SIGNAL sont tous deux en dessous de 25 et se croisent, ACHETER.

si le MAIN et le SIGNAL se croisent au-dessus de 25, FERMEZ L'ACHAT.

Si le signal principal et le signal sont tous deux au-dessus de 75 et se croisent, VENDRE.

Si le signal principal et le signal se croisent (pas besoin d'être en dessous de 75), FERMEZ VENTE.

c'est tout...

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

//| 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 ne peut pas faire ce qu'il est censé faire, AIDEZ-MOI !

Bonjour, je suis vraiment nouveau dans cette programmation mq4 mais j'ai lu les tutoriels de codersgurus (merci beaucoup !) donc je pense que je peux comprendre quelque chose... Cependant, j'ai fait cet EA qui est basé sur les MOVING AVERAGES... MAIS IL NE FONCTIONNE TERRIBLEMENT PAS COMME IL DEVRAIT !

les regles ici sont tres simples...

1. MA_04_1H (signifie moyenne mobile période 4 pour le temps 1 heure) croise au-dessus de MA_14_1H,

confirmez-le avec MA_04_4H étant au-dessus de MA_14_4H (la tendance est à la hausse) ------> BUY !

2. MA_04_1H croise en dessous de MA_14_1H,

confirmez-le avec MA_04_4H étant en dessous de MA_14_4H (la tendance est à la baisse)------> VENDRE !

3. lorsque MA_04_1H croise la MA_14_1H, fermez cet ordre (il peut commencer un nouvel ordre étant donné les règles #1 et #2)

4. une seule transaction... (si BUY, fermez ce BUY. après cela, SELL si nécessaire)

J'ai créé 2 fonctions : Croisé, et Confirmé.

Crossed est pour la période de 1 heure.

Confirmé est pour le cadre temporel de 4 heures.

Quelqu'un peut-il m'aider à déboguer ce truc ?

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

//| 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);

}

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

s'il vous plaît, ignorez mon message précédent... j'ai mis cette idée à la poubelle... je travaille sur ce projet maintenant... alors aidez-moi s'il vous plaît...