Demandez ! - page 82

 

Codersguru, aidez-nous

Codersguru

j'essaye d'écrire une alerte sonore pour l'indicateur bullspower lorsqu'il franchit la ligne zéro. je n'ai pas d'expérience avec MQL mais j'ai assemblé du code à partir de plusieurs autres indicateurs. lors de la compilation du code, il n'y a pas d'erreur. bien que l'alerte de l'indicateur ne fonctionne pas, pourriez-vous m'aider à la corriger ou peut-être à créer un nouveau code pour cette alerte sonore lorsque Bullbears franchit la ligne zéro ?

merci beaucoup par avance

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

//| |

//| |

//| |

//| |

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

#property copyright "forex-tsd"

#property link "https://www.forex-tsd.com"

#property indicator_separate_window

#property indicator_buffers 2

#property indicator_color1 Lime

#property indicator_color2 Crimson

#property indicator_level1 0

double ExtMapBuffer1[] ;

double ExtMapBuffer2[] ;

double valbull[] ;

double valbull[] ;

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

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

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

int init()

{

IndicatorBuffers(3) ;

SetIndexBuffer(0,ExtMapBuffer1) ;

SetIndexDrawBegin(0,2) ;

SetIndexLabel(0, "ExtMapBuffer1") ;

SetIndexBuffer(1,ExtMapBuffer2) ;

SetIndexStyle(1, DRAW_HISTOGRAM, STYLE_SOLID, 4) ;

SetIndexDrawBegin(1,2) ;

SetIndexLabel(1, "ExtMapBuffer2") ;

//---- indicateurs

//----

return(0) ;

}

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

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

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

int deinit()

{

//---- TODO : ajoutez votre code ici

//----

return(0) ;

}

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

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

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

int start()

{

int shift,counted_bars=IndicatorCounted() ;

double valbear[], valbull[] ;

//---- 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-- ;

shift=Bars-1 ;

while(shift>=0)

{

valbull[shift]=iBullsPower(NULL, 0, 13,PRICE_CLOSE,0) ;

valbear[shift]=iBearsPower(NULL, 0, 13,PRICE_CLOSE,0) ;

si (valbull[shift]>0)

{

ExtMapBuffer1[shift]=valbull[shift] ;

ExtMapBuffer2[shift]=0 ;

}

sinon

{

ExtMapBuffer2[shift]=valbull[shift] ;

ExtMapBuffer1[shift]=0 ;

}

shift--;//

}

//---- module d'alerte

#define SIGNAL_BAR 1

//---- Variables statiques où le dernier temps de barre

//---- et le dernier sens d'alerte sont stockés

static int PrevSignal = 0, PrevTime = 0 ;

//---- Si la barre sélectionnée pour être analysée n'est pas une barre zéro,

// il est inutile de vérifier l'alerte

//---- plusieurs fois. Si aucune nouvelle barre ne commence à se former, quittez.

if(SIGNAL_BAR > 0 && Time[0] <= PrevTime )

return(0) ;

//---- Marque que cette barre a été vérifiée

PrevTime = Time[0] ;

si(PrevSignal <= 0)

{

si(valbull[SIGNAL_BAR] > 0 )

{

PrevSignal = 1 ;

Alert("BullChannell_positiv (", Symbol(), ", ", Period(), ") - ACHETEZ ! !!") ;

}

}

si(PrevSignal >= 0)

{

si(valbull[SIGNAL_BAR] < 0 )

{

PrevSignal = -1 ;

Alert("BearChannell_negativ (", Symbol(), ", ", Period(), ") - VENTE ! !!") ;

}

}

//---- fin du module d'alerte

//----

retour(0) ;

}

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

 

Comment utiliser la fonction permettant de différencier les ordres ouverts des ordres en cours?

Comment utiliser la fonction pour différencier les ordres ouverts des ordres en cours ?

Merci.

 
vntb:
Comment utiliser la fonction pour différencier les ordres ouverts des ordres en attente ? Merci.

Vérifier le OrderType() :

OrderType() == OP_BUY //BuyOrder (ouvert)

OrderType() == OP_SELL //Ordre de vente (ouvert)

OrderType() == OP_BUYLIMIT //Ordre d'achat limite (en attente)

OrderType() == OP_SELLLIMIT //Ordre limite de vente (en attente)

OrderType() == OP_BUYSTOP //Ordre d'achat stop (en attente)

OrderType() == OP_SELLSTOP //Ordre de vente stop (en attente)

 

iMAOnArray dans l'EA

Bonjour à tous,

J'essaie de faire une EMA basée sur les croisements de moyennes mobiles sur des indicateurs (par exemple CCI, Force, RSI). Cependant, je n'arrive pas à comprendre comment déclarer un tableau et exécuter la fonction iMAOnArray pour créer des variables.

Par exemple, dans le code ci-dessous, je veux placer les données RSI du graphique dans un tampon, puis utiliser ces données pour produire une moyenne mobile avec laquelle déclencher des transactions. Qu'est-ce que je fais de mal ?

Merci pour tout commentaire ou suggestion.

automne

double RSI[] ;

ArrayResize(RSI,Bars) ;

ArraySetAsSeries(RSI,true) ;

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

{

RSI = (iRSI(NULL,0,RSIPeriod,RSIPrice,i)) ;

}

double Green0 = iMAOnArray(RSI,0,GreenPeriod,0,GreenPrice,0) ;

 

Bonjour

Quelqu'un a le step-momentum avec alerte ?

Ce sera un excellent indicateur je pense

merci

salutations !

 

Fermer une transaction par niveau

Bonjour, j'aimerais savoir comment fermer une transaction lorsque le prix a atteint un certain niveau. Disons, 55 points au-dessus de la ligne MA. J'ai essayé d'inclure la MA dans la partie TakeProfit de l'OrderSend, mais le testeur rejette mon EA avec le message d'erreur "invalid something" : message d'erreur "invalid something". Merci.

 
Sendra:
Bonjour, j'aimerais savoir comment fermer une transaction lorsque le prix a atteint un certain niveau. Disons, 55 points au-dessus de la ligne MA. J'ai essayé d'inclure la MA dans la partie TakeProfit de l'OrderSend, mais le testeur rejette mon EA avec : message d'erreur "invalid something". Merci.

Tout d'abord, obtenez la moyenne mobile:

double MA = iMA(...) ;

puis calculez le TakeProfit comme ceci :

double TP = MA + (55*Point) ; // ou TP = MA-(55*Point) ; dans le cas d'une vente.

 

Ça marche !

Hé, merci, CodersGuru. Cela fonctionne. Mais cela me fait aussi penser : Si je peux déplacer le take profit à un certain niveau qui n'est pas statique, je peux faire la même chose avec mon stoploss (sans utiliser le trailingstop).

Et j'ai essayé.

Cela a fonctionné, avec un mauvais résultat. Donc, je suppose que je dois utiliser le trailingstop. Est-ce correct ? (Attention, je n'ai pas encore appris à coder le trailingstop).

Merci.

 

Trailing stop interne

Sendra:
Merci, CodersGuru. Cela fonctionne. Mais cela me fait aussi penser : si je peux déplacer le take profit à un certain niveau qui n'est pas statique, je peux faire la même chose avec mon stoploss (sans utiliser le trailingstop).

Et j'ai essayé.

Cela a fonctionné, avec un mauvais résultat. Donc, je suppose que je dois faire avec le trailingstop. Est-ce correct ? (Attention, je n'ai pas encore appris à coder le trailingstop).

Merci.

J'ai fait quelque chose comme ceci pour un trailing stop interne : (ceci est un exemple pour un ordre long) Cela semble fonctionner. J'espère que cela vous aidera.

extern int Trailing_Stop=20 ;

static double Trailing_Long ;

bool Read_Long_Open ;

si (Insérez votre décision d'entrée longue)

{

Fonction Ordersend() ici

Read_Long_Open=true ;

}

si (Read_Long_Open==true)

{

if(OrderSelect(T_1L, SELECT_BY_TICKET)==true)

{

Trailing_Long=OrderOpenPrice() ;

Print(" Trailing_Long =",Trailing_Long) ;

Read_Long_Open=false ;

}

}

si (Read_Long_Open==false)

{

si (Trailing_Long < Bid)

{

Trailing_Long=Bid ;

Print("Trailing_Long ajusté =",Trailing_Long) ;

}

}

si (Bid <= Trailing_Long-Trailing_Stop*Point)

{

Fonction OrderClose()

Print("Ordre long fermé") ;

}

 

Merci

Salut, Wolfe,

J'ai essayé votre code, mais j'ai obtenu un résultat plus négatif à la place. Ne me demandez pas pourquoi, car je ne connais pas non plus la réponse. Je suis toujours dans une phase d'improvisation dans le codage. Mais merci quand même, votre code m'a donné assez d'inspiration pour écrire le mien avec un résultat suffisant pour moi.

Donc, merci.

Raison: