Comment coder ? - page 62

 
Dan7974:
Comment puis-je coder ceci ?

Si le marché touche (X.XX50 ou X.XX00)

alors achetez. Comment identifier les deux derniers chiffres ?

Merci.

Ceci devrait le faire :

if ( Point == 0.01 ) {xPrice = Close - MathMod(Close,0.50) ; }

else { xPrice = Close - ( MathMod(100*Close,0.50)*0.01 ) ; }

P1Buffer = xPrice + Point*50;

P2Buffer = xPrice ;

P3Buffer = xPrice - Point*50;

[/CODE]

When MathMod(Close,0.50) = 0 then the price ends in 00 or 50.

Here's my indicator to identify 00 lines:

[CODE]

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

//| _TRO_00_Lines |

//| |

//| |

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

#property indicator_chart_window

#property indicator_buffers 3

#property indicator_color1 LightGray

#property indicator_color2 LightGray

#property indicator_color3 LightGray

// indicators parameters

//---- buffers

double P1Buffer[];

double P2Buffer[];

double P3Buffer[];

double xPrice ;

int myStyle = 2 ;

int myWingDing = 250 ;

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

//| Custom indicator initialization function |

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

int init()

{

SetIndexBuffer(0, P1Buffer);

SetIndexBuffer(1, P2Buffer);

SetIndexBuffer(2, P3Buffer);

SetIndexArrow(0, myWingDing);

SetIndexArrow(1, myWingDing);

SetIndexArrow(2, myWingDing);

SetIndexStyle(0, DRAW_ARROW, myStyle, 1);

SetIndexStyle(1, DRAW_ARROW, myStyle, 1);

SetIndexStyle(2, DRAW_ARROW, myStyle, 1);

SetIndexEmptyValue(0,0);

SetIndexEmptyValue(1,0);

SetIndexEmptyValue(2,0);

return(0);

}

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

//| Custom indicator deinitialization function |

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

int deinit()

{

return(0);

}

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

//| Custom indicator iteration function |

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

int start()

{

int i, dayi, counted_bars = IndicatorCounted();

//---- check for possible errors

if(counted_bars < 0)

return(-1);

//---- last counted bar will be recounted

if(counted_bars > 0)

counted_bars--;

int limit = Bars - counted_bars;

//----

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

{

if ( Point == 0.01 ) {xPrice = Close - MathMod(Close,1.00) ; }

else { xPrice = Close - ( MathMod(100*Close,1.00)*0.01 ) ; }

P1Buffer = xPrice + Point*100;

P2Buffer = xPrice ;

P3Buffer = xPrice - Point*100;

} // for

return(0);

} // start
 

J'en ai besoin pour un EA cependant !

 

Coders s'il vous plaît aidez

Que changer dans le code pour déplacer plus de points haut et bas des chandeliers ?

Dossiers :
diagram.gif  18 kb
 

Quelqu'un pourrait vous aider si vous postiez le code.

Lux

 

Voici l'indicateur

Indicateur dont vous pouvez modifier le code pour déplacer les points vers le haut et vers le bas.

Dossiers :
 

utilisation correcte de Time[]

Je suis un bon programmeur mais je suis novice en matière de mql4. Je travaille sur un conseiller expert en box trade (aka breakout trade). Il s'agit essentiellement de trouver les valeurs les plus hautes et les plus basses pour un cadre temporel spécifique, et lorsqu'une bougie se ferme en dehors de cette boîte, je place un trade.

Essentiellement, il y a trois états dans lesquels je peux démarrer mon EA

1) après la clôture de la journée précédente, et avant l'heure de début de la boîte.

2) après le début de la boîte mais avant la fin de la boîte.

3) après la fin de la boîte.

Ce que je trouve déroutant, c'est le tableau Time[], car l'index change constamment. Supposons que j'entre à l'état 2. Dans la fonction init, j'allais définir une variable globale donnant la position du début de la boîte. Au fur et à mesure que les citations arrivent, ma fonction start est constamment appelée, et une fois que le temps de fin de boîte est atteint, j'aurais les positions de début et de fin. Bien sûr, ce n'est pas le cas, car l'index du tableau Time continue d'avancer.

Au mieux, je peux continuer à incrémenter la position de l'index de début de boîte, mais cela ne semble pas une façon très propre de faire les choses.

Si vous avez une suggestion sur la façon dont je devrais changer ma façon de penser du traditionnel c/c++ à mql4, j'aimerais l'entendre.

De plus, lorsque j'aurai terminé, je bénéficierai grandement d'une revue de code par un programmeur plus expérimenté. Quelqu'un se porterait-il volontaire pour cela ?

Merci pour votre temps,

Markus

 
mweltin:
Je suis un bon programmeur mais je suis nouveau dans mql4. Je travaille sur un conseiller expert en box trade (aka breakout trade). Essentiellement, il devrait trouver les valeurs les plus hautes et les plus basses pour un cadre temporel spécifique, et quand une bougie ferme en dehors de cette boîte, je place un trade.

Essentiellement, il y a trois états dans lesquels je peux lancer mon EA

1) après la clôture de la journée précédente, et avant l'heure de début de la boîte.

2) après le début de la boîte mais avant la fin de la boîte.

3) après la fin de la boîte.

Ce que je trouve déroutant, c'est le tableau Time[], car l'index change constamment. Supposons que j'entre à l'état 2. Dans la fonction init, j'allais définir une variable globale donnant la position du début de la boîte. Au fur et à mesure que les citations arrivent, ma fonction start est constamment appelée, et une fois que le temps de fin de boîte est atteint, j'aurais les positions de début et de fin. Bien sûr, ce n'est pas le cas, car l'index du tableau Time continue d'avancer.

Au mieux, je peux continuer à incrémenter la position de l'index de début de boîte, mais cela ne semble pas une façon très propre de faire les choses.

Si vous avez une suggestion sur la façon dont je devrais changer ma façon de penser du traditionnel c/c++ à mql4, j'aimerais l'entendre.

De plus, lorsque j'aurai terminé, je bénéficierai grandement d'une revue de code par un programmeur plus expérimenté. Quelqu'un se porterait-il volontaire pour cela ?

Merci pour votre temps,

Markus

La fonction Time[] ne change pas constamment - elle ne change qu'à la fin de la barre du graphique en cours. En revanche, TimeCurrent() renvoie une valeur qui change en permanence (avec une résolution d'une seconde).

Vous pouvez également obtenir l'heure exacte de n'importe quelle barre et de n'importe quel cadre temporel en utilisant iTime(). Il y a plusieurs façons de procéder...

 

ouvrir deux ordres en même temps (problème...)

Bonjour, je ne sais pas pourquoi dans certaines opportunités le script ouvre deux ordres en même temps.

Quelqu'un peut m'aider avec ceci, s'il vous plaît

if(UseStopLoss)

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,EAName, MagicNo, 0,Green) ;

sinon

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

si(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("Ordre BUY ouvert : ",OrderOpenPrice()) ;

}

else Print("Erreur lors de l'ouverture de l'ordre BUY : ",GetLastError()) ;

merci

 

Aide pour le code

Bonjour à tous,

Je voudrais coder un indicateur pour calculer la valeur de clôture qui crée un renversement d'un indicateur comme le HMA. Pour cela je dois créer une fonction pour calculer une valeur de HMA avec un onglet de valeurs de clôture où je modifie la valeur courante dans une boucle de dichotomie pour trouver la valeur qui crée le renversement.

Quelqu'un peut m'aider avec ma fonction ComputeHull ?

Voici mon code, sans recherche de dichotomie c'est juste un indicateur HMA simple avec la fonction computeHull, l'indicateur est affiché mais il est décalé vers le bas.

Salutations

//#property indicator_separate_window

#property indicator_chart_window

#property indicator_buffers 3

#property indicator_color1 Blue

//---- paramètres d'entrée

extern int HullAntPeriod=12 ;

//---- tampons

double TempBuf1[] ;

double TempBuf2[] ;

double HullAntBuf[] ;

//Variable

int HalfHullAntPeriod ;

int SqrtHullAntPeriod ;

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

//| Fonctions spécifiques |

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

double ComputeHull(int ActualBar)

{

double CloseTemp[] ;

double Temp[] ;

double Temp1, Temp2 ;

double result = -1 ;

int i ;

//Copier les valeurs de fermeture dans CloseTemp

ArrayResize(CloseTemp, HullAntPeriod+SqrtHullAntPeriod) ;

ArrayCopy(CloseTemp, Close, 0, ActualBar, HullAntPeriod+SqrtHullAntPeriod) ;

ArraySetAsSeries(CloseTemp, true) ;

ArrayResize(Temp, SqrtHullAntPeriod) ;

/Calcul de la valeur du HMA

for(i=0 ; i<SqrtHullAntPeriod ; i++)

{

Temp1 = iMAOnArray(CloseTemp, 0, HalfHullAntPeriod, 0, MODE_LWMA, i) ;

Temp2 = iMAOnArray(CloseTemp, 0, HullAntPeriod, 0, MODE_LWMA, i) ;

Temp = 2*Temp1-Temp2 ;

}

ArraySetAsSeries(Temp, true) ;

résultat = iMAOnArray(Temp, 0, SqrtHullAntPeriod, 0, MODE_LWMA, 0) ;

//---- terminé

return(result) ;

}

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

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

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

int init()

{

//---- 1 tampons supplémentaires sont utilisés pour les données temporaires.

IndicatorBuffers(3) ;

//---- paramètres de dessin

SetIndexStyle(0,DRAW_LINE) ;

SetIndexStyle(1,DRAW_NONE) ;

//---- mappage de 2 tampons d'indicateurs

SetIndexBuffer(0,HullAntBuf) ;

SetIndexBuffer(1,TempBuf1) ;

SetIndexBuffer(2,TempBuf2) ;

//---- nom pour l'étiquette de la DataWindow et de la sous-fenêtre de l'indicateur

IndicatorShortName("HULL ANTICIP("+HullAntPeriod+")") ;

SetIndexLabel(0, "HULL ANTICIPATION") ;

SetIndexLabel(1,NULL) ;

SetIndexLabel(2,NULL) ;

//---- Initialisation de l'indicateur spécifique

HalfHullAntPeriod = MathFloor(HullAntPeriod/2) ;

SqrtHullAntPeriod = MathFloor(MathSqrt(HullAntPeriod)) ;

//---- initialisation terminée

return(0) ;

}

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

//| Fonction personnalisée de désinitialisation de l'indicateur |

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

int deinit()

{

//----

//----

return(0) ;

}

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

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

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

int start()

{

int bar, limit, i ;

int counted_bars=IndicatorCounted() ;

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

if(counted_bars>0) counted_bars-- ;

limit=Bars-counted_bars ;

for(i=0 ; i<limit ; i++)

HullAntBuf=ComputeHull(i) ;

//----

retour(0) ;

}

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

 

Pourquoi cela ne fonctionne-t-il pas ?

int Highest;

double Place;

int Start()

{

Highest=iHighest(Symbol(),0,MODE_HIGH,1,0);Place=iHigh(Symbol(),0,Highest);

if(Gate==0){

if(iClose(Symbol(),0,0)>=Place){

OrderModify(ticket3,Ask,Ask-TrailingStop*Point-Spread,0,0,Green);

Gate=1;}

return(0);

}

J'obtiens des erreurs. Je ne peux pas faire un simple stop suiveur !!!!!!!