Demandez ! - page 129

 
forexarchitect:
Bonjour à tous

J'ai une question... comment puis-je modifier ce qui suit ;

extern double MaxLot = 1.50 ;

double max_lot = GetMaxLot(OP_BUY, OP_SELL) ;

si (max_lot >= MaxLot) lot = CalcHedgeLot(order_type) ;

(type_ordre)] : ", lot) ;

if (lot == -1) return (lot) ;

lot = NormalizeDouble(lot, LotPrec) ;

si (lot > MaxLot) lot = MaxLot ;

si (lot < MinLot) lot = MinLot ;

return (lot) ;

}

la vérification ci-dessus pour OP_BUY ET OP_SELL

Question : comment puis-je le changer en n'importe quel OP_BUY OU n'importe quel OP_SELL ?

appréciez

Vous devez modifier le code de la fonction GetMaxLot(), ou peut-être pouvez-vous utiliser GetMaxLot(OP_BUY, OP_BUY) ; et GetMaxLot(OP_SELL, OP_SELL) ; (cela dépend du code - on peut faire comme ça ou pas).

Mais je pense que cela vaut la peine d'essayer

Goen

 
Goen:
Est-ce que c'est ce que vous cherchez ?

-----------

int bars_count=WindowBarsPerChart() ;

int bar=WindowFirstVisibleBar() ;

-----------

Goen

Merci, Goen .

 
Goen:
Vous devez modifier le code de la fonction GetMaxLot(), ou peut-être pouvez-vous utiliser GetMaxLot(OP_BUY, OP_BUY) ; et GetMaxLot(OP_SELL, OP_SELL) ; (cela dépend du code - on peut faire comme ça ou pas).

Mais je pense que cela vaut la peine d'essayer

Allez-y

merci de m'avoir répondu...

Que dois-je changer ici ? Merci de votre aide.

double GetMaxLot(int type1, int type2)

{

double max_lot = 0.0 ;

int cnt = OrdersTotal() ;

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

{

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

if (OrderSymbol() != Symbol()) continue ;

if (OrderMagicNumber() != Magic) continue ;

if (OrderType() != type1 && OrderType() != type2) continue ;

si (max_lot == 0 || OrderLots() >= max_lot)

{

max_lot = OrderLots() ;

}

}

return (max_lot) ;

}

 

un peu en perte de vitesse ici...

 

comment ajouter une alerte à l'indicateur tis ?

j'ai un indicateur de croisement MA qui fonctionne très bien, mais il n'a pas le support d'alerte sonore qui me fait rater beaucoup de trades, pouvez-vous s'il vous plaît m'apprendre comment ajouter une alerte à cet indicateur car je ne connais rien au meta code.... merci...

voici le code de l'indicateur avec l'indicateur lui-même, merci...

/*[[

Nom := EMA Cross

Auteur := Hapsa

Lien := http://www.metaquotes.net/

Fenêtre séparée := Non

Fenêtre séparée := Non

Première couleur := Rouge

Premier Type de Dessin := Symbole

Premier symbole := 108

Use Second Data := Yes

Deuxième couleur := Vert olive foncé

Second Type de Dessin := Symbole

Second Symbole := 108

]]*/

#property copyright "Hapsa"

#property link ""

extern int SlowPeriod=20 ;

extern int FastPeriod=5 ;

#property indicator_buffers 3

#property indicator_chart_window

#property indicator_color1 Red

#property indicateur_color2 Vert

double L20[] ;

double L50[] ;

double shift=0,val1=0,val2=0 ;

int init()

{

IndicatorBuffers(3) ;

SetIndexStyle(0,DRAW_ARROW) ;

SetIndexStyle(1,DRAW_ARROW) ;

SetIndexArrow(0, 108) ;

SetIndexArrow(1, 108) ;

SetIndexBuffer(0,L20) ;

SetIndexBuffer(1,L50) ;

//---- indicateurs

//----

return(0) ;

}

int start()

{

int counted_bars=IndicatorCounted() ;

//----

int i = Bars - counted_bars - 1 ;

alors que (i>=0)

{

val1=0 ;

val2=0 ;

double iMaSlowPrevious = iMA(NULL,0,SlowPeriod,0,MODE_EMA, PRICE_CLOSE, i-1) ;

double iMaSlowCurrent = iMA(NULL,0,SlowPeriod,0,MODE_EMA, PRICE_CLOSE, i) ;

double iMaFastPrevious = iMA(NULL,0,FastPeriod,0,MODE_EMA, PRICE_CLOSE, i-1) ;

double iMaFastCurrent = iMA(NULL,0,FastPeriod,0,MODE_EMA, PRICE_CLOSE, i) ;

si (iMaFastPreviousiMaSlowCurrent ) val1=High ;

si (iMaFastPrevious>iMaSlowPrevious && iMaFastCurrent<iMaSlowCurrent ) val2=Low ;

L20=val1+5*Point ;

L50=val2-5*Point ;

i-- ;

}

//----

return(0) ;

}

Dossiers :
cross.mq4  2 kb
cross.ex4  3 kb
 
forexarchitect:
Merci de m'avoir répondu.

Que dois-je modifier ici ? Merci de votre aide.

double GetMaxLot(int type1, int type2)

{

double max_lot = 0.0 ;

int cnt = OrdersTotal() ;

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

{

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

if (OrderSymbol() != Symbol()) continue ;

if (OrderMagicNumber() != Magic) continue ;

if (OrderType() != type1 && OrderType() != type2) continue ;

si (max_lot == 0 || OrderLots() >= max_lot)

{

max_lot = OrderLots() ;

}

}

return (max_lot) ;

}

Oui, vous pouvez utiliser GetMaxLot(OP_BUY,OP_BUY) ; pour obtenir le lot maximum pour les transactions ouvertes à l'achat uniquement, et GetMaxLot(OP_SELL,OP_SELL) ; pour obtenir le lot maximum pour les transactions ouvertes à la vente uniquement.

Vous pouvez simplifier ce code "if (max_lot == 0 || OrderLots() >= max_lot)" avec "if (OrderLots() > max_lot)".

Parce que si max_lot = 0, il sera automatiquement inférieur à n'importe quel lot des transactions ouvertes. Et le signe ">=" est remplacé par ">" car si la valeur est la même, il n'est pas nécessaire de mettre à jour max_lot avec la même valeur, ce qui est inutile. Il ne sera mis à jour que si la nouvelle valeur est supérieure à max_lot.

En changeant ce code, votre processus pourrait être plus rapide.

Goen

 

problème de stoploss

Bonjour,

Je suis nouveau dans le domaine du forex/méta-trading mais j'essaie de comprendre comment tout cela fonctionne.

J'essaie maintenant d'écrire un EA et j'ai peur de manquer quelque chose de fondamental.

Si, dans mon code, je remplace

OrderSend(Symbol(),OP_SELL,0.1,Bid,3,0,0,"",MAGIC,0,Red) ;

par

OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Ask+Point*10,0,"",MAGIC,0,Red) ;

Et en testant cette nouvelle version dans le testeur de stratégie, j'obtiens MOINS d'ordres. Comment l'ajout d'un stoploss peut-il diminuer le nombre d 'entrées d'ordres? Je peux imaginer que le nombre augmente dans le cas où l'ajout d'un ordre stop fait sortir les ordres plus tôt et donc de nouveaux ordres peuvent être ajoutés plus rapidement, mais MOINS d'ordres... ?

Une idée ?

Merci

 
azertyken2:
Bonjour,

Je suis nouveau dans le domaine du forex/méta-trading mais j'essaie de comprendre comment tout cela fonctionne.

J'essaie maintenant d'écrire un EA et j'ai peur de manquer quelque chose de fondamental.

Si, dans mon code, je remplace

OrderSend(Symbol(),OP_SELL,0.1,Bid,3,0,0,"",ordercount,0,Red) ;

par

OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Ask+Point*10,0,"",ordercount,0,Red) ;

Et en testant cette nouvelle version dans le testeur de stratégie, j'obtiens MOINS d'ordres. Comment l'ajout d'un stoploss peut-il diminuer le nombre d'entrées d'ordres ? Je peux imaginer que le nombre augmente dans le cas où l'ajout d'un ordre stop fait sortir les ordres plus tôt et donc de nouveaux ordres peuvent être ajoutés plus rapidement, mais LESS ordres... ?

Une idée ?

Merci

10 pips peut être trop proche de la limite des stops imposés par le courtier (varie selon les courtiers) - ce qui signifie que si c'est un minimum de 10 pips et que le prix oscille d'un pip à l'intérieur de cette limite au moment où l'ordre est placé, l'ordre sera rejeté...

 

Omelette, vous avez raison, augmenter le stoploss a réglé le problème, merci ! :-)

 
#property indicator_color1 Magenta

#property indicator_color2 Yellow

extern bool TrendDirectionUp=true;

string Color1;

string Color2;

int init() {

if(TrendDirectionUp==true)//Conditionj 1

{

Color1=Yellow;

Color2=CLR_NONE;

}

if(TrendDirectionUp==false)//Condition2

{

Color1=CLR_NONE;

Color2=Magenta;

}

SetIndexStyle(0,DRAW_ARROW,0,star_size,Color1);

SetIndexStyle(1,DRAW_ARROW,0,star_size,Color2);

SetIndexArrow(0,172);//333

SetIndexArrow(1,172);//334

SetIndexBuffer(0,b1);

SetIndexBuffer(1,b2);

return(0);

}

Actuellement, les deux couleurs 1 et 2 sont noires sur le graphique !

Un gourou expert peut-il m'aider à résoudre ce problème ?

Merci à l'avance !