Comment coder ? - page 232

 

Idée

OK les gars et les filles

J'ai caressé l'idée de créer simplement une CUF (Commonly used functions) - d'après ce que j'ai lu, il n'est pas possible d'appeler des scripts depuis une EA.

Néanmoins, j'ai pensé à une solution de contournement parce que je n'aime pas être obligé de redessiner la roue à chaque fois, et je suis sûr que les choses fonctionneraient mieux de cette façon.

Les scripts, comme tout le monde le sait, se chargent, font leur travail, puis se déchargent et ne se chargent plus jamais, sauf si vous appuyez sur vos touches de raccourci.

C'est un problème majeur que je vois avec tous les EA, ils semblent rester bloqués en attendant qu'une condition de temps ou une condition de "sommeil" soit passée avant de continuer. Cela rend l'annulation et la vente en une fraction de seconde peu probable ce qui est un échec majeur dans des conditions extrêmement volatiles dont vous pourriez tirer une fortune en quelques secondes.

La solution ? Fabriquer un indicateur CUFF qui fonctionne sur des variables globales ? ?? Quelqu'un a-t-il essayé ceci ? L'indicateur fonctionne à chaque tick, donc c'est parfait.

 

Comment coder une alerte qui enverra des alertes sonores ou électroniques lorsque plusieurs indicateurs et conditions de barre sont remplis ?

 

Bonjour,

étant un débutant, je voudrais savoir si les fonctions intégrées de metastock : ref() et stochmomentum() sont implémentées par certaines fonctions de metatrader.

thnx

 

Darian, voir mon exemple de globales ci-dessus. trouvez un script qui envoie des emails / sifflets / fait ce que vous voulez et codez-le dedans. attention, vous devrez prendre en compte le fait qu'ils ne se déclencheront pas tous précisément au même moment, donc vous devrez mettre un délai de quelques secondes / minutes avant de remettre les variables à 0.

 

avec Global

Puis-je ajouter un GlobalVarible à un indicateur comme ceci ?

if ( trend[2]0 && Volume[0]>1 && !UpTrendAlert)

{

GlobalVariableSet("trend "+Symbol(),1) ;

// Print("UP" + GlobalVariableGet("trend "+Symbol()) ;)

Message = " Buy "+Symbol()+" M "+Period()+" : Signal pour BUY" ;

if ( AlertMode>0 ) Alert (Message) ;

UpTrendAlert=true ; DownTrendAlert=false ;

puis appeler cette GlobalVariable dans un EA avec

int init() {

GlobalVariableDel("trend "+Symbol()) ;

trend = GlobalVariableGet("trend "+Symbol()) ;

Buy = (trend == 1) ;

Vendre = (trend == 2) ;

Toute aide est appréciée

 

Vous pourriez cependant, si vous négociez plus d'une devise, cela ne fonctionnera pas.

 

Problèmes avec les tableaux, besoin d'aide !

Bonjour,

J'essaie de créer une fonction qui détermine si un ordre ouvert perd plus d'argent qu'un point de coupure (disons, $-1000).

La fonction est censée stocker le OrderTicket() et le OrderProfit() dans deux tableaux séparés, et sortir avec un retour (1) pour signifier que le seuil a été atteint.

Avant de stocker les valeurs dans ces tableaux, il doit vérifier le tableau OrderTicket() pour voir si cet ordre est déjà déposé.

Si le numéro de l'OrderTicket est déjà stocké dans le tableau, il est censé déterminer si l'ordre a perdu 1000 $ SUPPLÉMENTAIRES, et si c'est le cas : remplacer la valeur dans le tableau OrderProfit() par une nouvelle valeur, et sortir avec return(1) pour signifier qu'un NOUVEAU seuil a été atteint. Si l'ordre n'a pas perdu 1000$ supplémentaires (appelé Cutoff) alors il devrait retourner(0) pour signifier qu'aucun ordre n'a perdu 1000$ supplémentaires.

Je pense avoir réussi à le faire fonctionner (je n'en suis pas sûr ??), mais pour une raison quelconque, le tableau se remplit de beaucoup de valeurs '0' avec les valeurs légitimes. La sortie du tableau est la suivante :

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 431 ResumeArrayPrices[k] = -3042

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 425 ResumeArrayPrices[k] = -3042

ResumeArrayTickets[k] = 386 ResumeArrayPrices[k] = -1008

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 371 ResumeArrayPrices[k] = -12933

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 320 ResumeArrayPrices[k] = -6057

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 249 ResumeArrayPrices[k] = -5076

ResumeArrayTickets[k] = 241 ResumeArrayPrices[k] = -1017

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 230 ResumeArrayPrices[k] = -13122

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 186 ResumeArrayPrices[k] = -4068

ResumeArrayTickets[k] = 128 ResumeArrayPrices[k] = -1008

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

[/code]

The following is my actual code:

[code]

int CheckForResume()

{

ResumeCheck = TimeLocal()+(PERIOD_M1*60)*5;

}

int arraycount1 =1;

int arraycount2 =1;

bool found = false;

int k;

for (int i = 0; i<OrdersTotal();i++)

{

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

if ((OrderType() == OP_BUY) || (OrderType() == OP_SELL))

{

if (OrderProfit()< Cutoff)

{

for (k=0; k<ArraySize(ResumeArrayTickets); k++)

{

if ((ResumeArrayTickets[k] == OrderTicket()) && ResumeArrayTickets[k] !=0)

{

found = true;

if (ResumeArrayPrices[k] + Cutoff < OrderProfit())

{

return (0);

}

else

{

Print ("ELSE");

arraycount1 = ArrayResize(ResumeArrayTickets,ArraySize(ResumeArrayTickets) + 1);

arraycount2 = ArrayResize(ResumeArrayPrices,ArraySize(ResumeArrayPrices) + 1);

ResumeArrayTickets[k] = OrderTicket();

ResumeArrayPrices[k] = OrderProfit();

return (1);

}

}

}

if (found == false)

{

arraycount1 = ArrayResize(ResumeArrayTickets,ArraySize(ResumeArrayTickets) + 1)'

arraycount2 = ArrayResize(ResumeArrayPrices,ArraySize(ResumeArrayPrices) + 1);

ResumeArrayTickets[k] = OrderTicket();

ResumeArrayPrices[k] = OrderProfit();

return (1);

}

}

}

return (0);

}

}

 

Rafraîchir un EA une fois par barre

Bonjour, existe-t-il un moyen de rafraîchir une EA afin qu'elle réagisse comme la première fois qu'elle est initialisée ? (Comme un redémarrage) Cela doit être fait une fois par barre. Par exemple, une fois toutes les 30 minutes.

RefreshRates() et WindowRedraw() ne le font pas correctement.

J'aimerais également conserver quelques variables et ne pas perdre les données.

Existe-t-il un moyen de le faire ?

J'aimerais également pouvoir le faire pour un indicateur.

Merci beaucoup.

 

Aide à la programmation

Bonjour à tous,

Je travaille sur la modification d'un compteur de force de devise pour montrer la force de la devise basée sur le temps du graphique. Actuellement, le code utilisé est le suivant :

aHigh = MarketInfo(mySymbol,MODE_HIGH); // set a high today

aLow = MarketInfo(mySymbol,MODE_LOW); // set a low today

aBid = MarketInfo(mySymbol,MODE_BID); // set a last bid

aAsk = MarketInfo(mySymbol,MODE_ASK);

Je comprends que MODE_HIGH et MODE_LOW obtiennent les hauts et bas du jour. Comment pourrais-je obtenir le haut et le bas de l'intervalle de temps actuel du graphique à la place ?

Merci !

P.S. Je ne suis pas un programmeur, alors utilisez des mots courts s'il vous plaît :)

 

Consultez le manuel d'aide pour les fonctions iHigh et iLow.

bonne chance

Lux