Comment coder ? - page 187

 

Oui, je veux faire 3 étapes

Exemple :

Atteindre 15 et revenir 10

Atteindre 30 et revenir 15

Atteindre 45 et revenir 15

Ou fermer au stop loss.

Je vais prendre une photo et essayer de mieux expliquer.

 
fosgate_r:
C'est quelque chose de nouveau pour moi.

Donc, la clôture du trade perdant doit toujours attendre qu'il rebondisse, non ?

Et s'il ne rebondit pas ?

Est-ce qu'on va fermer au SL initial ?

Merci, je l'ai déjà fait, j'essaie maintenant de l'optimiser pour obtenir de bons résultats avec cette protection contre les pertes.

 

J'essaie de trouver des informations sur le traçage d'une ligne, comme l'indicateur RSI par exemple. J'ai deux nombres que je veux tracer comme des lignes sur le même indicateur.

Je sais que cela implique une sorte de tableau, mais je n'ai pas de chance de trouver le groupe de code qui permettra d'y parvenir.

 

tampon indicateur

SPACECHIMP:
J'essaie de trouver des informations sur le traçage d'une ligne, comme l'indicateur RSI par exemple... J'ai deux nombres que je veux tracer comme des lignes sur le même indicateur. Je sais que cela implique une sorte de tableau mais je n'ai pas de chance de trouver quel groupe de code le fera...

Veuillez lire cet article

Le langage MQL4 pour les débutants. Indicateurs personnalisés (Partie 1) - MQL4 Articles

 
smb1970:
Salut les amis,

Je ne sais pas si quelqu'un est familier avec Forex Made-EZ de George Smith.

Je suis en train de revoir son travail et je me demandais si quelqu'un avait codé un indicateur pour l'oscillateur Oscar qu'il utilise ?

La formule est la suivante

let A = le plus haut sommet des huit dernières barres (y compris celle-ci)

let B = le plus bas niveau des huit dernières barres (y compris celle-ci)

let C = prix de clôture de la barre actuelle

let X = la valeur précédente de l'oscillateur (Oscar)

L'oscillateur "brut" d'aujourd'hui est égal à (C-B) divisé par (A-B) multiplié par 100.

Ensuite, nous "lissons" notre chiffre brut (appelons-le Y) comme suit :

L'oscillateur final = ((X divisé par 3) fois 2), plus (Y divisé par 3).

Si quelqu'un a codé ou peut coder ceci, ce serait très apprécié.

Salutations Steve

J'ai essayé de le coder moi-même. Quelqu'un pourrait-il me dire si cela fait ce que je pense. Les valeurs ne semblent pas tout à fait correspondre à ce qu'elles font si je calcule manuellement les chiffres. De plus, il ne démarre qu'à partir du moment où l'indicateur est placé. J'aimerais qu'il affiche également les valeurs historiques.

#property indicator_separate_window

#property indicator_buffers 1

#property indicator_color1 Red

//---- tampons

double ExtMapBuffer1[] ;

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

//| Fonction d'initialisation de l'indicateur personnalisé |

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

int init()

{

//---- indicateurs

SetIndexStyle(0,DRAW_LINE) ;

SetIndexBuffer(0,ExtMapBuffer1) ;

string short_name = "Indicateur Oscar" ;

IndicatorShortName(short_name) ;

//----

return(1) ;

}

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

//| Fonction de désinitialisation de l'indicateur Custor |

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

int deinit()

{

return(0) ;

}

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

//| Fonction d'itération de l'indicateur personnalisée |

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

int start()

{

int counted_bars=IndicatorCounted() ;

//---- vérifier les erreurs éventuelles

if (counted_bars<0) return(-1) ;

//---- dernière barre comptée sera recomptée

if (counted_bars>0) counted_bars-- ;

int pos=Bars-counted_bars ;

//---- boucle de calcul principale

double x ;

x=50 ;

while(pos>=0)

{

double a, b, c, y, osc ;

//laissez A = le plus haut sommet des huit dernières barres (y compris celle-ci)

a=High ;

//let B = le plus bas des huit dernières barres (y compris celle-ci)

b=Low ;

//let C = prix de clôture de la barre actuelle

c = Close[pos] ;

//let X = la valeur précédente de l'oscillateur (Oscar)

//L'oscillateur "brut" du jour est égal à (C-B) divisé par (A-B) fois 100.

y=((c-b)/(a-b))*100 ;

//Puis nous "lissons" notre nombre brut (appelons-le Y) comme ceci :

//Nombre final d'oscillateurs = ((X divisé par 3) fois 2), plus (Y divisé par 3).

osc=((x/3)*2)+(y/3) ;

ExtMapBuffer1[pos]= osc ;

pos-- ;

}

return(0) ;

}

Toute aide est la bienvenue.

Merci Steve

 

Demandez... Mode_trades

Bonjour, quelqu'un peut-il donner un exemple d'utilisation de MODE_TRADES ?

Merci.

 

Pour smb1970 - c'est ça :

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

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

#property indicator_separate_window

#property indicator_buffers 1

#property indicator_color1 Red

#property indicator_maximum 100

#property indicator_minimum 0

//

//

//

//

//

extern int OscPeriod = 8;

extern int OscPrice = PRICE_CLOSE;

double oscBuffer[];

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

//| |

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

//

//

//

//

//

int init()

{

SetIndexBuffer(0,oscBuffer);

IndicatorShortName("Osc ("+OscPeriod+")");

return(0);

}

int deinit() { return(0); }

int start()

{

int counted_bars=IndicatorCounted();

int i,limit;

if(counted_bars<0) return(-1);

if(counted_bars>0) counted_bars--;

limit=Bars-counted_bars;

//

//

//

//

//

for(i=limit; i>=0; i--)

{

double price = iMA(NULL,0,1,0,MODE_SMA,OscPrice,i);

double high = High[ArrayMaximum(High,OscPeriod,i)];

double low = Low[ArrayMinimum(Low,OscPeriod,i)];

//

//

//

//

//

if (high!=low)

double raw = 100.00*(price-low)/(high-low);

else raw = 0.00;

oscBuffer= oscBuffer*2.0/3.0 + raw/3.0;

}

return(0);

}

Mais, regardez aussi l'image : en haut, c'est "Oscar", en bas, c'est l'Ema(5) de la stochastique(8), ou pour faire encore plus simple, en bas, c'est la stochastique(8,5,1) avec la ligne de signal réglée sur exponentielle. Donc "Oscar" est simplement une ligne de signal de la stochastique.

Dossiers :
oscar.gif  21 kb
 

Merci !

Merci mladen, non seulement c'est très utile, mais c'est aussi très révélateur !

 

NewB ayant besoin d'aide pour le codage :-(

Bonjour à tous,

J'ai besoin d'un peu d'aide disparate ici . J'ai un code qui va chercher un accord entre différents indicateurs. Une fois qu'ils sont tous d'accord, je veux un moyen pour les trades d'entrer de la façon dont je l'ai décrit dans les images du graphique. Jusqu'à présent, je peux entrer le premier trade "Buy" mais il n'entre pas seulement 1 trade.... il entre jusqu'à 8 trades. Et ensuite, si le marché va à l'encontre de mes intérêts, j'entre dans une "transaction de contingence" où j'achète/vends à nouveau malgré le fait que le marché va à l'encontre de mes intérêts. J'apprécierais grandement si quelqu'un pouvait me montrer à quoi devrait ressembler le code correct.

Je ne sais pas si ces images seront affichées, mais juste au cas où, je les ai aussi en pièces jointes.

Voici mon code défectueux qui est censé exécuter la transaction...

while (execute_trade ==5)

{if ( OrdersTotal() == buy_trade1 ) //buy_trade1 = 1...ceci l'arrête après qu'un ordre ait été placé...mais ne fonctionne pas encore

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point) ;

execute_trade=0 ;

if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES))

Print("Mon ticket est : " , ticket) ;

{

buy1 = OrderOpenPrice() ; //en prenant le prix du 1er ordre et en le mettant dans cette variable

// Comment("le prix d'ouverture du premier ordre est ", OrderOpenPrice() + " " + buy1 + " inférieur à " + (buy1-0.0030)) ;

si (buy1 >= (buy1-0.0030))

{

//si ( OrdersTotal() <= buy_trade1 ) //cela l'arrête après qu'un ordre ait été placé.

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point) ;

//exécuter_trade=0 ;

}

} else

Print("OrderSelect a retourné l'erreur de ",GetLastError()) ;

}

 

NewB ayant besoin d'un peu d'aide pour coder

Bonjour à tous,

J'ai besoin d'une aide disparate. J'ai un code qui va chercher un accord entre différents indicateurs. Une fois qu'ils sont tous d'accord, je veux un moyen pour les trades d'entrer dans la façon dont je l'ai décrit dans les images du graphique. Jusqu'à présent, je peux entrer le premier trade "Buy" mais il n'entre pas seulement 1 trade.... il entre jusqu'à 8 trades. Et ensuite, si le marché va à l'encontre de mes intérêts, j'entre dans une "transaction de contingence" où j'achète/vends à nouveau malgré le fait que le marché va à l'encontre de mes intérêts.J'apprécierais grandement si quelqu'un pouvait me montrer à quoi devrait ressembler le code correct.

Je ne sais pas si ces images seront affichées, mais juste au cas où, je les ai aussi en pièces jointes.

Photo 1

Photo 2

Voici mon code défectueux qui est censé exécuter la transaction...

while (execute_trade ==5)

{if ( OrdersTotal() == buy_trade1 ) //buy_trade1 = 1...ceci l'arrête après qu'un ordre ait été placé...mais ne fonctionne pas encore

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+ TakeProfit*Point) ;

execute_trade=0 ;

if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES))

Print("Mon ticket est : " , ticket) ;

{

buy1 = OrderOpenPrice() ; //en prenant le prix du 1er ordre et en le mettant dans cette variable

// Comment("le prix d'ouverture du premier ordre est ", OrderOpenPrice() + " " + buy1 + " inférieur à " + (buy1-0.0030)) ;

si (buy1 >= (buy1-0.0030))

{

//si ( OrdersTotal() <= buy_trade1 ) //cela l'arrête après qu'un ordre ait été placé.

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+ TakeProfit*Point) ;

//exécuter_trade=0 ;

}

}

else

Print("OrderSelect a retourné l'erreur de ",GetLastError()) ;

}