Comment coder ? - page 50

 

Récupérer un type de données à partir d'un indicateur

Bonjour

Est-il possible de récupérer un type de données d'un indicateur (3 MA Cross w alert) pour le mettre dans un EA ?

Voici ce que je veux faire :

Dans l'indicateur (3 MA Cross w alert) j'ai mis un type de données :

double execute_trade = "ok_buy" ou execute_trade = "ok_sell" ici :

************Indicator ************

si ((fasterMAnow > slowerMAnow &&

fasterMAprevious <= slowerMAprevious &&

fasterMAafter > slowerMAafter &&

mediumMAnow > slowerMAnow )

||

(fasterMAnow > slowerMAnow &&

mediumMAnow > slowerMAnow &&

mediumMAprevious <= slowerMAprevious &&

mediumMAafter > slowerMAafter )))

{

CrossUp = Low - Range*0.5 ;

string execute_trade = "ok_buy" ;

}

si ((fasterMAnow < slowerMAnow &&

fasterMAprevious >= slowerMAprevious &&

fasterMAafter < slowerMAafter &&

mediumMAnow < slowerMAnow )

||

(fasterMAnow < slowerMAnow &&

mediumMAnow < slowerMAnow &&

mediumMAprevious >= slowerMAprevious &&

mediumMAafter < slowerMAafter )))

{

CrossDown = High + Range*0.5 ;

execute_trade = "ok_sell" ;

}

************************

et je voudrais récupérer "excute_trade" dans mon EA comme ceci :

***********EA***************

si (excute_trade== "ok_buy")

Ordre = SIGNAL_BUY ;

si (excute_trade== "ok_sell")

Ordre = SIGNAL_VENTE ;

****************************

Mais je ne sais pas comment faire

aidez moi s'il vous plait

Meilleures salutations

Dossiers :
 
Julia:
Quelqu'un peut-il avoir la gentillesse de me dire comment coder le code suivant ?

Si mon Ea est activé sur le graphique M30, je veux que le code dise :

if(sur le graphique M5, la clôture d'aujourd'hui est>la clôture d'hier)

{

.........

}

La clôture d'aujourd'hui est le BID actuel ; la clôture d'hier est indépendante de la période, donc peu importe la période M30 ou M5.

if(Bid > iClose(NULL,PERIOD_D1,1))

{

...

}

 
natsirte:
Bonjour

Est-il possible de récupérer un type de données d'un indicateur (3 MA Cross w alert) pour le mettre dans un EA ?

Voici ce que je veux faire :

Dans l'indicateur (3 MA Cross w alert) j'ai mis un type de données :

double execute_trade = "ok_buy" ou execute_trade = "ok_sell" ici :

************Indicator ************

si ((fasterMAnow > slowerMAnow &&

fasterMAprevious <= slowerMAprevious &&

fasterMAafter > slowerMAafter &&

mediumMAnow > slowerMAnow )

||

(fasterMAnow > slowerMAnow &&

mediumMAnow > slowerMAnow &&

mediumMAprevious <= slowerMAprevious &&

mediumMAafter > slowerMAafter )))

{

CrossUp = Low - Range*0.5 ;

string execute_trade = "ok_buy" ;

}

si ((fasterMAnow < slowerMAnow &&

fasterMAprevious >= slowerMAprevious &&

fasterMAafter < slowerMAafter &&

mediumMAnow < slowerMAnow )

||

(fasterMAnow < slowerMAnow &&

mediumMAnow < slowerMAnow &&

mediumMAprevious >= slowerMAprevious &&

mediumMAafter < slowerMAafter )))

{

CrossDown = High + Range*0.5 ;

execute_trade = "ok_sell" ;

}

************************

et je voudrais récupérer "excute_trade" dans mon EA comme ceci :

***********EA***************

si (excute_trade== "ok_buy")

Ordre = SIGNAL_BUY ;

si (excute_trade== "ok_sell")

Ordre = SIGNAL_VENTE ;

****************************

Mais je ne sais pas comment faire

Aidez moi s'il vous plait

Meilleures salutations

Vous devez utiliser la fonction iCustom pour récupérer la valeur des buffers (ie les flèches) ;

double iCustom( string symbol, int timeframe, string name, ..., int mode, int shift)

Calcule l'indicateur personnalisé spécifié et renvoie sa valeur. L'indicateur personnalisé doit être compilé (fichier *.EX4) et se trouver dans le répertoire terminal_directory\experts\indicators.

Paramètres :

symbol - Symbole dont les données doivent être utilisées pour calculer l'indicateur. NULL signifie symbole actuel.

timeframe - Cadre temporel. Il peut s'agir de n'importe quelle valeur de l'énumération Timeframe. 0 signifie l'horizon temporel du graphique actuel.

name - Nom du programme compilé de l'indicateur personnalisé.

... - Jeu de paramètres (si nécessaire). Les paramètres passés et leur ordre doivent correspondre à l'ordre de déclaration et au type des variables externes de l'indicateur personnalisé.

mode - Indice de ligne. Peut être compris entre 0 et 7 et doit correspondre à l'index utilisé par une des fonctions SetIndexBuffer.

shift - Index de la valeur prise dans le tampon de l'indicateur (décalage par rapport à la barre actuelle d'un nombre donné de périodes).

Exemple :

double val=iCustom(NULL, 0, "SampleInd",13,1,0) ;

Dans votre cas, la syntaxe devrait être :

if(iCustom(NULL, 0, "3 MA Cross w_Alert v2", p1, , , , p10, 0, 0) > 0) // Buy

{

...

}

if(iCustom(NULL, 0, "3 MA Cross w_Alert v2", p1, , , , p10, 1, 0) > 0) // Sell

{

...

}

Les paramètres p1 à p10 sont les valeurs à envoyer à l'indicateur comme paramètres externes. Par exemple, p1 signifie la valeur à attribuer à FasterMA, p2 à FasterShift, et ainsi de suite jusqu'à la dernière déclaration externe p10 SoundAlert. Voir le code de l'indicateur pour connaître l'ordre et la signification de ces paramètres.

 

Merci Michel.

Mais que se passe-t-il si le code est dans un code indicateur ?

Est-ce que c'est :

if(Close[pos]>iHigh(Symbol(),PERIOD_M5,[pos+1]) ?????

 
Beno:
Aujourd'hui, je répare lentement les erreurs dans certaines de mes ea (et j'apprends beaucoup en cours de route) mais qu'est-ce que cela signifie ?

2007.10.24 21:22:24 1998.11.20 06:00 The Abyss GBPJPY,Daily : invalid double number as parameter 6 for OrderSend function

Je ne trouve rien sur cette erreur, que dois-je regarder ?

int OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)

Comme vous pouvez le voir, le paramètre 6 est le stoploss. Assurez-vous que votre stoploss est défini comme un int. Ensuite, assurez-vous dans votre commande OrderSend() que vous multipliez le stoploss par point. Cela permet d'obtenir le double correct pour la devise que vous négociez.

Exemple pour une position longue :

ticketa=OrderSend(Symbol(),OP_BUY,lotsize,Ask,slip,Ask-intStopLoss*Point,Ask+intTakeProfit*Point, "Comment",magic,0,Green) ;

Exemple pour faire court :

ticketb=OrderSend(Symbol(),OP_SELL,lotsize,Bid,slip,Bid+intStopLoss*Point,Bid-intTakeProfit*Point, "Comment",magic,0,Blue) ;

J'espère que cela vous aidera.

 

Merci Wolfe

Cela a beaucoup aidé mais a ouvert un nouveau problème lol il achète maintenant mais ne vend pas bien pas au bon endroit. J'ai essayé d'acheter quand les trois indicateurs sont bleus et de vendre quand ils sont rouges.

Je pense que j'ai choisi le bon nom "The Abyss" pour l'ea. car c'est là que je suis assis en essayant de coder ma sortie. LOL

2007.11.24 10:14:44 2007.11.23 12:00 The Abyss EURUSD,H4 : Erreur lors de l'ouverture d'un ordre de VENTE: 0

void CheckForSignals() {

double TML=iCustom(NULL,0, "TrendManager",TM_Period,TM_Shift,0,shift) ;

double TMS=iCustom(NULL,0, "TrendManager",TM_Period,TM_Shift,1,shift) ;

double hasOpenLong=iCustom(NULL,0, "Heiken_Ashi_Smoothed",MaMetod,MaPeriod,MaPeriod2,1,shift) ;

double hasCloseLong=iCustom(NULL,0, "Heiken_Ashi_Smoothed",MaMetod,MaPeriod,MaPeriod2,3,shift) ;

double hasOpenShort=iCustom(NULL,0, "Heiken_Ashi_Smoothed",MaMetod,MaPeriod,MaPeriod2,0,shift) ;

double hasCloseShort=iCustom(NULL,0, "Heiken_Ashi_Smoothed",MaMetod,MaPeriod,MaPeriod2,2,shift) ;

double SDLL=iCustom(NULL,0, "Slope Direction Line",period,method,price,0,shift) ;

double SDLS=iCustom(NULL,0, "Slope Direction Line",period,method,price,1,shift) ;

buysig=false ;

sellsig=false ;

closebuy=false ;

closesell=false ;

bool Long1 = TML ;

bool Short1 = TMS ;

bool Long2 = SDLL ;

bool Short2 = SDLS ;

bool Long3 = hasOpenLong > hasCloseLong ;

bool Short3 = hasOpenShort < hasCloseShort ;

buysig = Long1 && Long2 && Long3 ;

sellsig = Short1 && Short2 && Short3 ;

closebuy=sellsig ;

closesell=buysig ;

}

void CheckForOpen() {

if (last==Time[0]) return ;

int res,ord ;

double entrée, arrêt ;

ord=CalculateCurrentOrders() ;

si (ord!=0) CheckForClose() ;

//---- conditions d'achat

if (buys< buysig) {

res=OpenAtMarket(OP_BUY,Lots) ;

if (res<0) Print("Error opening BUY order : ",(GetLastError())) ;

sinon last=Time[0] ;

}

//---- conditions de vente

if (sells< sellsig) {

res=OpenAtMarket(OP_SELL,Lots) ;

if (res<=0) Print("Erreur lors de l'ouverture de l'ordre SELL : ",(GetLastError())) ;

sinon last=Time[0] ;

}

}

int OpenAtMarket(int mode,double lot) {

int tr,col ;

double openprice ;

tr=0 ; while (tr<5 && !IsTradeAllowed()) { tr++ ; Sleep(2000) ; }

RefreshRates() ;

si (mode==OP_SELL) {

openprice=Bid ;

col=Red ;

} else {

//openprice=nd(Ask) ;

prix ouvert=Demande ;

col=Bleu ;

}

OrderSend(Symbol(),mode,lot,openprice,slippage,sl,tp,EAName+Magic,Magic,0,col) ;

}

retour ;

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

//| Vérifier les conditions d'ordre de fermeture |

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

void CheckForClose() {

int total ;

//----

total=OrdersTotal() ;

for(int i=total;i>=0;i--)

{

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

if(OrderMagicNumber()!=Magic || OrderSymbol()!=Symbol()) continue ;

//---- vérifier le type d'ordre

if(OrderType()==OP_BUY && closebuy) CloseAtMarket(OrderTicket(),OrderLots()) ;

if(OrderType()==OP_SELL && closesell) CloseAtMarket(OrderTicket(),OrderLots()) ;

}

}

bool CloseAtMarket(int ticket,double lot) {

bool bres=false ; int tr ;

tr=0 ; while (tr<5 && !IsTradeAllowed()) { tr++ ; Sleep(2000) ; }

RefreshRates() ;

bres=OrderClose(ticket,lot,OrderClosePrice(),slippage,White) ;

if (!bres) Print("Erreur de fermeture de l'ordre : ",(GetLastError()) ;)

}

 
Julia:
Merci Michel.

Mais qu'en est-il si le code est dans un code indicateur ?

C'est le cas :

if(Close[pos]>iHigh(Symbol(),PERIOD_M5,[pos+1]) ?????

Oui, c'est possible ; tout dépend de ce que l'on veut faire...

 

Aidez-nous à convertir ces fichiers en Mq4 - Merci beaucoup.

Chers tous :

Je suis en train de construire un système, je pense qu'il est très bon, j'ai testé l'idée avant pendant 3 mois, maintenant j'essaie de coder un indicateur qui sera asap dans le forum afin que nous puissions le tester et il va vraiment faire de l'argent bon je pense :

Je vous prie de m'aider pour le moment à convertir ces lignes en code mql4 :

1- J'ai le variable X, il aura une valeur et je le calcule maintenant

Donc nous avons X comme un entier

2- L'indicateur doit vérifier l'heure GMT actuelle, elle doit être 6:00am GMT - Time Frame 1 H

-- vérifier l'heure GMT 6:00am, QUAND cette bougie se ferme, nous devons calculer la variable suivante de cette bougie :

Haut - Bas = A

A / 2 = B

B - Haut = C = SL

D = X * 30

Buy_Entry= D + C

Cible d'achat = C + (X * 60%)

Sell_Entry= C - D

Cible de vente = C - (X * 60%)

Ensuite :

Je veux afficher le résultat sous forme de lignes sur le graphique avec une zone grise pour les achats et une zone rouge pour les ventes.

Ceux-ci doivent apparaître automatiquement dès que la bougie GMT 6:00 est terminée, Time Frame 1H, donc la calculatrice doit être en fonction de 6:00 à 6:59am GMT Candle high and low.

PLZ Convertissez ceci en MQL4, afin que je puisse le tester et revenir pour publier le résultat.

MERCI BEAUCOUP

 
Beno:
Merci Wolfe

Cela a aidé beaucoup mais a ouvert un nouveau problème lol il achète maintenant mais pas de vente bien pas au bon endroit. J'ai essayé d'acheter quand les trois indi sont bleus et de vendre quand ils sont rouges.

Je pense que j'ai choisi le bon nom "The Abyss" pour l'ea. car c'est là que je suis assis en essayant de coder ma sortie. LOL

Beno, je ne suis pas sûr de celui-ci. Je n'ai généralement pas eu de bonnes expériences avec l'utilisation d'indicateurs de changement de couleur dans les EA. Ouvrez votre fenêtre de données avec vos indicateurs attachés et trouvez quelle valeur numérique est retournée pour chaque couleur. Cela peut aider votre codage, assurez-vous également que vous appelez le bon tampon indicateur au bon moment. (Je suis sûr que vous l'avez déjà fait) Vous aurez peut-être plus de chance d'obtenir de l'aide si vous postez l'EA complet, si vous avez vraiment besoin d'aide. Aussi, personnellement, je coderais avec 2 fonctions Ordersend() séparées, une dédiée aux shorts, et une dédiée aux longs. C'est juste mon opinion, cela rend les choses plus faciles à suivre.

Bonne chance, nous avons tous eu notre propre version de "l'abîme" !

 

Merci Wolfe

Je vais essayer l'option 2 Ordersend pour voir ce qui se passe. Une fois que j'aurai réussi, je le posterai.

Raison: