[ARCHIVE] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 3. - page 262

 
Valdemar:

Messieurs, pouvez-vous me dire où j'ai fait une erreur en insérant cette fonction de chronométrage dans mon code EA ?

Le compilateur m'a juste inondé d'erreurs.



À l'endroit où vous avez déclaré une fonction à l'intérieur d'une autre fonction :

int init()
  {
  
bool isTradeTimeInt (int hb=05,int mb=50,int he=23,int me=00) 
    {
 
Roll:

Voir le 10ème paramètre de la fonction spécifiée. Défini à 0.

OrderSend(g_symbol_284, OP_BUY, Lots, g_ask_528 - gi_164 * g_point_400, Slippage, l_price_40, l_price_32, 0, g_magic_112, "Newest", MediumBlue) ;

J'ai trouvé cette ligne et qu'est-ce qu'il faut y changer ?

 
Starting:

L'utilisation est simple - je lance le script...

C'est ce que vous aviez besoin de prouver. C'est-à-dire que vous avez besoin d'un code qui détermine le bon ordre. Il existe des dizaines de situations de ce type, et vous ne pouvez pas enregistrer une fonction spéciale pour chacune d'entre elles afin de simplifier le code. Il doit être rédigé pour chaque cas.
Vous trouverez des exemples de fonctions similaires ici : Fonctions utiles de KimIV.

Si les produits du commerce ne conviennent pas, vous pouvez en construire un vous-même en vous inspirant des produits existants.
 
Bicus:

Ici, le calcul est basé sur l'inertie des prix. C'est-à-dire que le stop loss du premier ordre est déclenché, le second ordre est à un profit avec une valeur un peu inférieure à la perte. Si le prix évolue dans la même direction un peu plus, alors oui, nous pouvons être dans le bénéfice total.

Mais, à mon avis, cette stratégie n'en vaut pas la peine.

Oui, c'est ça ! Je devine s'il va aller quelques pips de plus dans la direction profitable :)
 
granit77:
C'est exactement ce que nous devons prouver. En d'autres termes, vous avez besoin d'un code qui trouverait l'ordre nécessaire. Il existe des dizaines de situations de ce type, et nous ne pouvons pas fournir une fonction spéciale pour chacune d'entre elles afin de simplifier le code. Il doit être rédigé pour chaque cas.
Vous trouverez des exemples de fonctions similaires ici : Fonctions utiles de KimIV.

Si les produits du commerce ne conviennent pas, vous pouvez en construire un vous-même en vous inspirant des produits existants.


Je crois que je n'ai pas bien compris.

Assertion 1 : Chaque code, après le déclenchement de l'ordre en attente, lorsqu'il accède à la date d'ouverture de cet ordre (qui est devenu négociable au moment de ce déclenchement), obtiendra la date d'ouverture égale à la date de placement de l'ordre en attente - c'est ainsi que fonctionne la fonction OrderOpenTime().

Affirmation 2 : Vous ne pouvez pas vous souvenir du moment exact du déclenchement d'un ordre en attente, sans un conseiller expert qui surveille constamment l'état des ordres sur le compte.


Solution possible 1. Nous pouvons essayer d'exécuter l'ordre à partir de la date d'établissement de l'ordre en suspens jusqu'à la date actuelle et noter l'heure du premier croisement du prix ouvert et du niveau de déclenchement.

Ce sera plus ou moins l'heure exacte, mais il y a un gros moins : l'écart. Puisque nous n'enregistrons pas le spread dans l'historique (je ne prends pas l'historique des ticks avec le spread de Dukas, par exemple, puisque je ne négocie pas dans Dukas et que nous devons le collecter et l'enregistrer), l'ordre peut s'être déclenché beaucoup plus tôt, lorsque le prix a presque touché le niveau ouvert mais ne l'a pas franchi, et l'ordre a été ouvert en raison de l'expansion du spread, et non plus tard, lorsque nous avons effectivement vu le prix franchir la ligne de fixation de l'ordre en attente.


La solution la plus probable est de créer un conseiller expert, de le placer sur le graphique et de surveiller les ordres sur le compte. Je ne veux pas le faire pour certaines raisons et il y a aussi des inconvénients liés à d'éventuels problèmes lors des interruptions de l'opération EA.


Les fonctions, auxquelles vous avez fait référence. Vous avez fourni un lien vers la fonction OrderOpenTime(). Pour les commandes différées, ce sera la date de leur création, et non de leur déclenchement. Par conséquent, les fonctions existantes ne sont pas adaptées. Et il n'y a aucun moyen de les combiner, puisqu'ils font toujours référence à OrderOpenTime() pour la date d'ouverture de l'ordre.

 
Pyxlik2009:

OrderSend(g_symbol_284, OP_BUY, Lots, g_ask_528 - gi_164 * g_point_400, Slippage, l_price_40, l_price_32, 0, g_magic_112, "Newest", MediumBlue) ;

J'ai trouvé cette ligne et qu'est-ce qu'il faut y changer ?

Imprimez les paramètres et voyez
 
Pyxlik2009:

OrderSend(g_symbol_284, OP_BUY, Lots, g_ask_528 - gi_164 * g_point_400, Slippage, l_price_40, l_price_32, 0, g_magic_112, "Newest", MediumBlue) ;

J'ai trouvé cette ligne et qu'est-ce qu'il faut y changer ?

Vous avez le dixième paramètre "Newest", alors que le nombre dont vous avez besoin est le temps d'expiration de l'ordre.
 

voici la ligne entière

if (!(AccountFreeMarginCheck(g_symbol_284, OP_BUY, Lots) <= 0.0 || GetLastError() == 134/* NOT_ENOUGH_MONEY */)) g_ticket_352 = OrderSend(g_symbol_284, OP_BUY, Lots, g_ask_528 - gi_164 * g_point_400, Slippage, l_price_40, l_price_32, 0, g_magic_112, "Newest RX-1", MediumBlue);
 
 
Pyxlik2009:

voici la ligne entière

Encore une fois :

Documentation :

int OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)

Votre dixième paramètre dans la chaîne "Newest" n' est pas un nombre. C'est pourquoi il y a une erreur
.

 

PapaYozh
:


Où vous avez déclaré une fonction dans une autre fonction :

int init()
  {
  
bool isTradeTimeInt (int hb=05,int mb=50,int he=23,int me=00) 
    {


Merci pour vos commentaires, cher PapaYozh,mais j'ai inséré cette fonction dans int start(), mais le résultat du compilateur ne change pas pour autant.

int start()
{
int H,M,Ticket;
double Max,Min,
Max1,Min1,
TP,
Total;

bool isTradeTimeInt(int hb=07,int mb=55,int he=23,int me=00) 
    {
  datetime db, de;           // Время начала и окончания работы
  int      hc;               // Часы текущего времени торгового сервера

  db=StrToTime(TimeToStr(TimeCurrent(), TIME_MINUTES)+" "+hb+":"+mb);
  de=StrToTime(TimeToStr(TimeCurrent(), TIME_MINUTES)+" "+he+":"+me);
  hc=TimeHour(TimeCurrent());
  if (db>=de) {
    if (hc>=he) de+=24*60*60; else db-=24*60*60;
  

  if (TimeCurrent()>=db && TimeCurrent()<=de) return(True);
  else return(False);
}
 

H=Hour();
M=Minute();
Total=OrdersTotal();
if(Total==0)
{
if(isTradeTimeInt==true)
{
   Max=High[iHighest(Symbol(),PERIOD_M5,MODE_HIGH,12,0)];
   Min=Low[iLowest(Symbol(),PERIOD_M5,MODE_LOW,12,0)];
Finalement, le compilateur m'a montré ces erreurs, et je pense qu'il s'agit d'une mauvaise définition de variable ?

.

Je m'excuse pour tout inconvénient, l'incompréhension, après tout, juste commencer à acquérir de l'expérience dans une telle question pas facile, et je pense que grâce à ce forum et les gens qui ont répondu ici, continuer à développer et améliorer leurs compétences, merci.