les aventures d'un débutant - page 11

 
niko:
merci CB, j'aurais dû le remarquer, donc l'erreur était juste à la fin (130).

Est-ce qu'il fonctionne alors ?


CB

 

Hé CB, il exécute les transactions mais je n'ai pas encore fait le tour détaillé des transactions pour voir si la logique est suivie correctement (elle semble l'être à première vue). C'est donc le moment de dire un énorme "MERCI !!!!" :-)

Il reste encore beaucoup de chemin à parcourir avant que la stratégie soit rentable, car le code n'est qu'un moyen d'automatiser les transactions, je dois faire un peu de travail de mon côté pour affiner la stratégie elle-même. On dirait que tous ces efforts ont porté leurs fruits, mais je suis toujours super perplexe avec le codage. Je vais commencer à faire des petits codes par moi-même pour afficher des commentaires sur mes graphiques, et m'amuser avec ceux-ci, pour m'aider à apprendre les fonctions et autres choses que vous avez utilisées. J'apprécie énormément votre aide pour cette CB, et votre patience alors que je demandais toujours la même chose et que je faisais toujours les mêmes erreurs. Merci !

 
CB, cela me fait penser à quelque chose. Comment pourrais-je faire une modification à votre code pour permettre à 2 ou max 3 trades d'être ouverts dans la même direction (ceci est comme une version 2 de votre code). Nous avons utilisé le code OP_BUY/OP_SELL pour l'ancien code donc nous devrons changer quelques choses. Si vous me dites sous forme de "squelette" ce qu'il faut faire (par exemple : construire une fonction pour faire ceci...) alors je peux essayer de le coder, et vous le ramener pour révision. Cette méthode est plus efficace que si vous le codez vous-même, car je peux suivre votre logique et apprendre des éléments de codage. Qu'en pensez-vous ? (Je peux voir que nous avons une variable externe dans laquelle nous définissons le nombre de transactions autorisées dans la même direction, puis nous faisons une fonction pour calculer les achats, une autre pour calculer les ventes, puis nous appelons ces deux fonctions dans start() et vérifions la variable externe là aussi... quelque chose comme ça ?
 

C'est facile.

Définissez un paramètre qui est le nombre maximum d'ordres ouverts. Externalisez-le si vous avez besoin de le modifier fréquemment.

Ensuite, mettez en œuvre en modifiant uniquement la fonction fnOrderDuplicate() - vous ne devriez pas avoir à modifier la fonction start(). Cela aidera à maintenir l'architecture existante de l'application.


CB

 
j'espère qu'un jour je pourrai dire "ce sera facile". ok je vais le faire, et voir ce qui se passe ! merci !
 

Hey CB, j'ai passé environ 2 heures à essayer de faire ce que tu as demandé dans le post ci-dessus, j'ai regardé d'autres codes, de la documentation, et aucun progrès (je ne sais tout simplement pas quoi faire). Il doit y avoir un moyen d'apprendre plus facilement que ce que je fais en ce moment, car j'ai l'impression de ne pas progresser dans l'apprentissage, vous écrivez gentiment tout le code pour moi.


bool fnOrderDuplicate()
 {
  iDuplicateOrders = 0;                                  //setting orderdup to zero
  iOrders = OrdersTotal()-1;                             //iOrders returns market orders count - 1. So if zero orders, we get -1
  for (int i= iOrders; i>=0; i--)                         // the loop to cycle through total orders
   {
    OrderSelect( i, SELECT_BY_POS, MODE_TRADES);            //select order for function
    if ((OrderType() != OP_BUY) && (OrderType() != OP_SELL))      //if order is NOT op-buy and is NOT op-sell, sCurrentOrderType = other (ie no order)
     sCurrentOrderType = "OTHER";
    if (OrderType() == OP_BUY)                           //if order=buy, sCurrent OrderType = buy
     sCurrentOrderType = "BUY";                          //***7Jul09 ';' was missing at end of line
    if (OrderType() == OP_SELL)                          //***7Jul09: the end ')' was missing.
     sCurrentOrderType = "SELL";                         //if orderfound = sell, sCurrentOrder= sell
    if ((OrderSymbol() == Symbol()) && ( sCurrentOrderType == sSignal))  //if ordersymbolfortheorder= symbolforchart && ScurrentOrder = sSignal(fn_entryrules) 
        iDuplicateOrders++;                              //iDuplicateOrders is added 1
   }
  if ( iDuplicateOrders == 0)                             //if iduporders = 0 then fnOrderDuplicate = false, otherwise it's true.
   return(false);
  return(true);
 }
 
hey CB, une aide sur le point ci-dessus, comment fixer le code pour faire des trades multiples dans une direction ?
 
niko:
hey CB, une aide sur le point ci-dessus, comment fixer le code pour faire un trade multiple dans 1 direction ?

Il suffit de remplacer : if (iDuplicateOrders == 0) par : if (iDuplicateOrders<= iMaxDuplicateOrders)

CB

 

Hey CB, merci pour cette information. Avec cette option, je ne peux pas réguler le nombre d'ordres ouverts autorisés dans une direction (disons que je fais extern iMaxDuplicateOrders = 4 ;) l'ea exécutera 4 shorts, et ne distribuera pas le paramètre de manière égale (ex : 2 shorts max, 2 longs max). Dois-je essayer de faire un double de bool fnOrderDuplicate (ex : bool fnOrderDuplicateBuys, et bool fnOrderDuplicateSells) et ensuite faire référence à chacun respectivement dans bool fnShouldWeTrade. Dans mon esprit, cela pourrait fonctionner, qu'en pensez-vous ?

 
niko:

Hey CB, merci pour cette information. Avec cette option, je ne peux pas réguler le nombre d'ordres ouverts autorisés dans une direction (disons que je fais extern iMaxDuplicateOrders = 4 ;) l'ea exécutera 4 shorts, et ne distribuera pas le paramètre de manière égale (ex : 2 shorts max, 2 longs max). Dois-je essayer de faire un double de bool fnOrderDuplicate (ex : bool fnOrderDuplicateBuys, et bool fnOrderDuplicateSells) et ensuite faire référence à chacun respectivement dans bool fnShouldWeTrade. Dans mon esprit, cela pourrait fonctionner, qu'en pensez-vous ?


En définissant iMaxDuplicateOrders = 4, cela signifie que le maximum sera de 4 ordres dans chaque direction, car nous vérifions la direction avant d'incrémenter le compteur.


Il faut rendre à César ce qui est à César. C'est l'inverse qui est vrai dans ce cas. Mes excuses - j'étais déjà déçu que vous n'ayez pas fait la modification vous-même. Tout ce qu'il fallait faire était de changer la limite d'un ordre unique à une variable.


Il est clair, d'après les annotations, que vous ne faites que recréer le code en prose sans vraiment en comprendre la logique.


CB

Raison: