Comment coder ? - page 321

 
mladen:
dasio

Essayez quelque chose comme ceci :

#property indicator_separate_window

#property indicator_buffers 2

#property indicator_color1 OrangeRed

#property indicator_color2 Silver

#property indicator_width1 2

extern int RsiPeriod = 50;

extern int RsiPrice = PRICE_CLOSE;

double work[];

double avg[];

//------------------------------------------------------------------

//

//------------------------------------------------------------------

//

//

//

//

//

int init()

{

SetIndexBuffer(0,work);

SetIndexBuffer(1,avg);

return(0);

}

int start()

{

int i,countedBars = IndicatorCounted();

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

if (countedBars>0) countedBars--;

int limit = MathMin(Bars-countedBars,Bars-1);

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

{

work = iRSI(NULL,0,RsiPeriod,RsiPrice,i);

int y = iBarShift(NULL,PERIOD_D1,Time);

int x = iBarShift(NULL,PERIOD_D1,Time);

if (x!=y)

{

int k = iBarShift(NULL,0,iTime(NULL,PERIOD_D1,y));

double average = work[k];

int c = 1;

for (int j=k-1; j>=i; j--,c++) average += work[j]; average /= c;

for ( j=k ; j>=i; j--) avg[j] = average;

}

}

return(0);

}

Mladen j'ai essayé mais sans succès.

Vous trouverez en pièce jointe un exemple de mon indicateur. Les seules différences sont dans les calculs mais l'autre est le même.

Pouvez-vous intégrer avec votre formule ? ainsi je peux aussi l'étudier.

Merci

test1.mq4

Dossiers :
test1.mq4  3 kb
 

Bonjour à tous. Je cherche une aide rapide pour écrire une ligne de code pour un signal.

J'utilise Step_Indy et une croix EMA pour le signal. Ce que je veux faire, c'est que l'EA n'entre dans la transaction que lorsque les deux donnent un signal à moins de 10 barres l'un de l'autre.

Donc disons que le Step donne un signal, je veux que l'EA regarde 10 barres en arrière pour voir s'il y a eu un croisement de MA, et si oui, entrer. (Note : je ne veux pas qu'il vérifie simplement si le signal actuel de croisement de MA est long, je veux qu'il soit récent, par exemple dans les 10 barres).

TIA pour toute aide, je ne pense pas avoir vu cela dans le passé dans aucun EA que j'ai regardé.

 

dasio

A partir du code, je ne peux pas voir quelle est l'intention du code. Quoi qu'il en soit, voici un code dans lequel vous pouvez choisir si vous souhaitez utiliser la plage réelle comme valeur "de base" de l'indicateur (c'est la première partie de votre code) ou si vous souhaitez utiliser la deuxième partie de votre code comme valeur "de base".

dasio:
Mladen j'ai essayé mais sans succès.

Vous trouverez en annexe un exemple de mon indicateur. Les seules différences sont dans les calculs mais l'autre est le même.

Pouvez-vous intégrer avec votre formule ? ainsi je peux aussi l'étudier.

Merci

test1.mq4
Dossiers :
_test1.mq4  2 kb
 

Problèmes de signal

Mladen, merci encore une fois, l'alerte ne se répète plus, elle fonctionne bien..... mais je veux mettre un stop sgnal..... et j'ai écrit le code suivant, le signal d'achat et de vente fonctionne mais le stop d'achat et le stop de vente ne fonctionnent pas, voir le code ci-dessous :

//-----Assignation des alarmes----

if(Period()==240){

static datetime lastAlerted=0 ;

double ist_main=iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_MAIN,0) ;

double ist_signal=iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_SIGNAL,0) ;

double RSIP1=iRSI(NULL,240,14,PRICE_CLOSE,0) ;

double RSIP2=iRSI(NULL,240,70,PRICE_CLOSE,0) ;

double b4enCCI=iCCI(NULL,240,6,PRICE_TYPICAL,1) ;

double nowenCCI=iCCI(NULL,240,6,PRICE_TYPICAL,0) ;

double b4trCCI=iCCI(NULL,240,14,PRICE_TYPICAL,1) ;

double nowtrCCI=iCCI(NULL,240,14,PRICE_TYPICAL,0) ;

// Alertes de négociation

if((adx_h4>=20)&&(di_p_h4>=20)&&(di_p_h4>di_m_h4)&&(ist_main>ist_signal)&&(RSIP1>RSIP2)&&(nowenCCI>0&nowenCCI>b4enCCI)&&(nowtrCCI>0&nowtrCCI>b4trCCI)&&(lastAlerted !=Time[0]))

{

lastAlerted=Time[0] ;

Alert("Buy","\n","Current time is ",TimeToStr(CurTime()),"\n",Symbol()) ;

}

if((adx_h4>=20)&&(di_m_h4>=20)&&(di_m_h4>di_p_h4)&&(ist_main<ist_signal)&&(RSIP1<RSIP2)&&(nowenCCI<0&nowenCCI<b4enCCI)&&(nowtrCCI<0&nowtrCCI<b4trCCI)&&(lastAlerted !=Time[0]))

{

lastAlerted=Time[0] ;

Alert("Sell","\n", "Current time is ",TimeToStr(CurTime()),"\n",Symbol()) ;

}

// Arrêt des alertes

if((adx_h4>=20)&&(di_p_h4>=20)&&(di_p_h4>di_m_h4)&&(ist_mainRSIP2)&&(nowenCCI>0&nowenCCI>b4enCCI)&&(nowtrCCI>0&&nowtrCCI>b4trCCI)||(adx_h4>=20)&&(di_p_h4>=20)&&(di_p_h4>di_m_h4)&&(ist_main>ist_signal)&&(RSIP10&&nowenCCI>b4enCCI)&&(nowtrCCI>0&&nowtrCCI>b4trCCI)||(adx_h4>=20)&&(di_p_h4>=20)&&(di_p_h4>di_m_h4)&&(ist_main>ist_signal)&&(RSIP1>RSIP2)&&(nowenCCI<0&&nowenCCI0&&nowtrCCI>b4trCCI)||(adx_h4>=20)&&(di_p_h4>=20)&&(di_p_h4>di_m_h4)&&(ist_main>ist_signal)&&(RSIP1>RSIP2)&&(nowenCCI>0&nowenCCI>b4enCCI)&&(nowtrCCI<0&nowtrCCI<b4trCCI)&&(lastAlerted !=Time[0]))

{

lastAlerted=Time[0] ;

Alert("Stop Buy","\n", "Current time is ",TimeToStr(CurTime()),"\n",Symbol()) ;

}

if((adx_h4>=20)&&(di_m_h4>=20)&&(di_p_h4ist_signal)&&(RSIP1<RSIP2)&&(nowenCCI<0&nowenCCI<b4enCCI)&&(nowtrCCI<0&&nowtrCCI=20)&&(di_m_h4>=20)&&(di_p_h4<di_m_h4)&&(ist_mainRSIP2)&&(nowenCCI<0&&nowenCCI<b4enCCI)&&(nowtrCCI<0&&nowtrCCI=20)&&(di_m_h4>=20)&&(di_p_h4<di_m_h4)&&(ist_main<ist_signal)&&(RSIP10&&nowenCCI>b4enCCI)&&(nowtrCCI<0&&nowtrCCI=20)&&(di_m_h4>=20)&&(di_p_h4<di_m_h4)&&(ist_main<ist_signal)&&(RSIP1<RSIP2)&&(nowenCCI<0&&nowenCCI0&&nowtrCCI>b4trCCI)&&(lastAlerted !=Time[0]))

{

lastAlerted=Time[0] ;

Alert(" Stop Sell","\n", "L'heure actuelle est ",TimeToStr(CurTime()),"\n",Symbol()) ;

}

mladen:
Essayez comme ceci :
if(Period()==240)

{

static datetime lastAlerted=0;

double ist_main=iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_MAIN,0);

double ist_signal=iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_SIGNAL,0);

double RSIP1=iRSI(NULL,240,14,PRICE_CLOSE,0);

double RSIP2=iRSI(NULL,240,70,PRICE_CLOSE,0);

double b4enCCI=iCCI(NULL,240,6,PRICE_TYPICAL,1);

double nowenCCI=iCCI(NULL,240,6,PRICE_TYPICAL,0);

double b4trCCI=iCCI(NULL,240,14,PRICE_TYPICAL,1);

double nowtrCCI=iCCI(NULL,240,14,PRICE_TYPICAL,0);

// alerts

if((ist_main>ist_signal)&&(RSIP1>RSIP2)&&(nowenCCI >0&&nowenCCI>b4enCCI)&&(nowtrCCI>0&&nowtrCCI>b4trCCI)&&(lastAlerted!=Time[0]))

{

lastAlerted=Time[0]; Alert("Buy Arrow","\n","Current time is ",TimeToStr(CurTime()),"\n",Symbol());

}

if((ist_main<ist_signal)&&(RSIP1<RSIP2)&&(nowenCCI <0&&nowenCCI<b4enCCI)&&(nowtrCCI<0&&nowtrCCI<b4trCCI)&&(lastAlerted!=Time[0]))

{

lastAlerted=Time[0]; Alert("Sell Arrow","\n","Current time is ",TimeToStr(CurTime()),"\n",Symbol());

}

}
 
mladen:
dasio A partir du code je ne peux pas voir quelle est l'intention du code. Quoi qu'il en soit, voici un code dans lequel vous pouvez choisir si vous souhaitez utiliser la plage réelle comme valeur "de base" de l'indicateur (c'est la première partie de votre code) ou si vous souhaitez utiliser la deuxième partie de votre code comme valeur "de base".

Merci mladen.

Je sais que calculer de cette façon n'a pas de sens. Mais j'essaie de coder une analyse que je fais tous les jours. ^^

C'est seulement 1/3 du travail.

Merci

 
mladen:
dasio A partir du code, je ne peux pas voir quelle est l'intention du code. Quoi qu'il en soit, voici un code dans lequel vous pouvez choisir si vous souhaitez utiliser la plage réelle comme valeur "de base" de l'indicateur (c'est la première partie de votre code) ou si vous souhaitez utiliser la deuxième partie de votre code comme valeur "de base".

Merci, c'est parfait.

Est-il possible d'ajouter le correctif du vendredi ?

Merci.

Salutations

 

Volume

Je veux demander le volume de chaque barre mais je n'ai pas la moindre idée de la façon de procéder. Je suis nouveau dans la programmation mql4 mais j'essaie d'apprendre. J'ai essayé ce programme simple mais il se peut qu'il soit complètement nul, merci de me le faire savoir, et toute suggestion serait appréciée. Ci-dessous se trouve le début du script pour demander le volume d'une barre puis imprimer le résultat, merci de me dire où je me trompe. ! !!! Je continue d'essayer de compiler, il y a une erreur qui dit (fin de la parenthèse de fin de programme) attendu.

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

extern double TakeProfit = 4 ;

extern double StopLoss = 20 ;

extern double Lots = 0.1 ;

extern double TrailingStop = 30 ;

extern double volumemore = 600 ;

extern double volumeless = 150 ;

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

//| fonction d'initialisation de l'expert

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

int start()

{

if (Volume=>volumemore)

{

Print ("volume plus") ;

{

if (Volume=<volumeless)

{

Print ("volume moins") ;

si(Bars<20)

{

Print("barres inférieures à 20") ;

{

//----

//----

retour (0) ;

}

 

Utilisez Volume où "index" est le numéro de la barre pour laquelle vous voulez voir le volume. Rappelez-vous que dans metatrader 4 le "Volume" est toujours le volume en tick.

Tim Latham:
Je veux demander le volume de chaque barre mais je n'ai pas la moindre idée de comment m'y prendre. Je suis nouveau dans la programmation mql4 mais j'essaie d'apprendre. J'ai essayé ce programme simple mais il se peut qu'il soit complètement nul, s'il vous plaît dites-le moi, et toute suggestion serait appréciée. Ci-dessous se trouve le début du script pour demander le volume d'une barre puis imprimer le résultat, s'il vous plaît dites-moi où je me trompe. ! !!! je continue à essayer de compiler il y a une erreur qui dit (fin de programme fin de crochet } attendu.

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

extern double TakeProfit = 4 ;

extern double StopLoss = 20 ;

extern double Lots = 0.1 ;

extern double TrailingStop = 30 ;

extern double volumemore = 600 ;

extern double volumeless = 150 ;

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

//| fonction d'initialisation de l'expert

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

int start()

{

if (Volume=>volumemore)

{

Print ("volume plus") ;

{

if (Volume=<volumeless)

{

Print ("volume moins") ;

si(Bars<20)

{

Print("barres inférieures à 20") ;

{

//----

//----

retour (0) ;

}
 
jayjonbeach:
Bonjour à tous. Je cherche une aide rapide pour écrire une ligne de code pour un signal.

J'utilise Step_Indy et une croix EMA pour le signal. Ce que je veux faire, c'est que l'EA n'entre dans la transaction que lorsque les deux signaux sont émis à moins de 10 barres l'un de l'autre.

Donc disons que le Step donne un signal, je veux que l'EA regarde 10 barres en arrière pour voir s'il y a eu un croisement de MA, si oui, il entre. (Note : je ne veux pas qu'il vérifie simplement si le signal actuel de croisement de MA est long, je veux qu'il soit récent, par exemple à moins de 10 barres).

Je ne pense pas avoir vu cela dans le passé dans aucun EA que j'ai regardé.

J'ai essayé plusieurs choses, mais jusqu'à présent rien n'a fonctionné.

Voici l'une des façons dont j'ai essayé :

extern int lookback = 10 ;

extern int EMA1 = 21 ;

extern int EMA2 = 55 ;

int GetEntrySignal()

{

int trendCurr = iCustom(NULL,StepMaTimeFrame, "StepMA_v7",Length,Kv,StepSize,MA_Mode,Advance,Percentage,UpDownShift,HighLow,ColorMode,5,StepMaBarToTest ) ;

int trendPrev = iCustom(NULL,StepMaTimeFrame, "StepMA_v7",Length,Kv,StepSize,MA_Mode,Advance,Percentage,UpDownShift,HighLow,ColorMode,5,StepMaBarToTest+1) ;

double TwentyOneEMA = iMA(NULL,0,EMA1,0,MODE_EMA,PRICE_CLOSE,1) ;

double FiftyFiveEMA = iMA(NULL,0,EMA2,0,MODE_EMA,PRICE_CLOSE,1) ;

if(TwentyOneEMA > FiftyFiveEMA)

{

si (trendCurr>0)

{

for(int i=1 ; i<=Bars-lookback ; i++)

{

si (trendCurr<0)

return(LONG) ;

sinon return(NONE) ;

}

}

}

if(TwentyOneEMA < FiftyFiveEMA)

{

si (trendCurr<0)

{

for(int i2=1 ; i2<=Bars-lookback ; i2++)

{

si (trendCurr>0)

return(SHORT) ;

sinon return(NONE) ;

}

}

}

return(NONE) ;

}

J'ai également essayé (int i=1 ; i<=lookback ; i++).

 

...

jayjonbeach,

Vous testez la valeur de trendCurr encore et encore dans la boucle sans la changer (donc elle retournera toujours NONE).

Essayez de mettre le iCustom() dans la boucle et puis testez cette valeur. Quelque chose comme ceci :

if (trendCurr>0)

{

for(int i=1; i<=lookback; i++)

{

int testValue = iCustom(NULL,StepMaTimeFrame,"StepMA_v7",Length,Kv,StepSize,MA_Mode,Advance,Percentage,UpDownShift,HighLow,ColorMode,5,StepMaBarToTest+i);

if (testValue<0) return(LONG);

}

return(NONE);

}

jayjonbeach:
J'ai essayé plusieurs choses, mais jusqu'à présent, rien n'a fonctionné.

Voici l'une des façons dont j'ai essayé cela :

extern int lookback = 10 ;

extern int EMA1 = 21 ;

extern int EMA2 = 55 ;

int GetEntrySignal()

{

int trendCurr = iCustom(NULL,StepMaTimeFrame, "StepMA_v7",Length,Kv,StepSize,MA_Mode,Advance,Percentage,UpDownShift,HighLow,ColorMode,5,StepMaBarToTest) ;

int trendPrev = iCustom(NULL,StepMaTimeFrame, "StepMA_v7",Length,Kv,StepSize,MA_Mode,Advance,Percentage,UpDownShift,HighLow,ColorMode,5,StepMaBarToTest+1) ;

double TwentyOneEMA = iMA(NULL,0,EMA1,0,MODE_EMA,PRICE_CLOSE,1) ;

double FiftyFiveEMA = iMA(NULL,0,EMA2,0,MODE_EMA,PRICE_CLOSE,1) ;

if(TwentyOneEMA > FiftyFiveEMA)

{

si (trendCurr>0)

{

for(int i=1 ; i<=Bars-lookback ; i++)

{

si (trendCurr<0)

return(LONG) ;

sinon return(NONE) ;

}

}

}

if(TwentyOneEMA < FiftyFiveEMA)

{

si (trendCurr<0)

{

for(int i2=1 ; i2<=Bars-lookback ; i2++)

{

si (trendCurr>0)

return(SHORT) ;

sinon return(NONE) ;

}

}

}

return(NONE) ;

}

Toute idée est la bienvenue.