Projet ouvert - tester-optimiser en interne - page 3

 
J'ai posté le code source ici - http://forexsystems.ru/phpBB/viewtopic.php?p=4379#4379
Vous pouvez voir les commentaires, qui ont dû être supprimés.
L'objectif des tableaux TradeOrdersArray et ClosedOrdersArray y est décrit. Et d'autres encore.
 
Fonction de trading OrderSend surchargée.
Les fonctions CorrectPrice() et DrawArrowOnChart() n'ont pas encore été définies.
Je l'ai posté ici - http://forexsystems.ru/phpBB/viewtopic.php?p=4380#4380

J'ai dû faire glisser toutes les variables du bloc init() vers l'en-tête - sinon les variables ne sont pas visibles. Ma première erreur.
La seconde est que le compilateur jure sur ma tentative de définir la valeur par défaut d'un paramètre de la fonction à NULL.
Troisièmement, le compilateur ne se plante pas lorsqu'une fonction non définie/indéfinie (CorrectPrice() et DrawArrowOnChart() ) est rencontrée dans le code.
Peut-être qu'il tombera sur NULL et ne se plaindra plus.
La définition de la fonction est stupide - j'ai copié du dictionnaire, donc si les développeurs me reprochent une mauvaise déclaration ....

  //+------------------------------------------------------------------+
//| Redefine OrderSend() function                       |
//+------------------------------------------------------------------+


int fut_OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit,
 string comment=[b]NULL[/b],int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)
  {
  if (CorrectPrice(symbol,cmd,price,myCurrentTime))
      {
      TradeOrdersArray[myOrdersTotal,0]= symbol;
      TradeOrdersArray[myOrdersTotal,1]=pool_pos;
      TradeOrdersArray[myOrdersTotal,2]=myOrderTicket+1;
      TradeOrdersArray[myOrdersTotal,3]=cmd;
      TradeOrdersArray[myOrdersTotal,4]=volume;
      TradeOrdersArray[myOrdersTotal,5]=price;
      TradeOrdersArray[myOrdersTotal,6]=slippage;
      TradeOrdersArray[myOrdersTotal,7]=stoploss;
      TradeOrdersArray[myOrdersTotal,8]=stoploss;
      TradeOrdersArray[myOrdersTotal,9]=comment;
      TradeOrdersArray[myOrdersTotal,10]=magic;
      TradeOrdersArray[myOrdersTotal,11]=myCurrentTime;
      DrawArrowOnChart(symbol,myCurrentTime,price,arrow_color);
      myOrderTicket++;
      myOrdersTotal++;
      pool_pos++;
      return(myOrderTicket);
      }
      else return(-1);
  }



Demain, j'essaierai de redéfinir OrderClose() - il sera plus facile d'expliquer l'idée du test à ce moment-là.
PS Deux personnes l'ont déjà téléchargé - il y a de l'espoir.

 
Vous pouvez voir les commentaires qui ont dû être supprimés.

Rosh, j'ai trouvé comment insérer du texte russe dans ce forum (j'ai dû le découvrir moi-même :)
Lorsque vous copiez le code dans l'éditeur, vous devez le mettre en russe. Et quand vous le collez dans un forum, respectivement, aussi.
Et tous les commentaires seront sauvegardés ;)
 
Renat, Slava...
Voici un bon exemple pour la discussion sur l'opérateur vide.
La conversion implicite de type est bien pire et plus dangereuse que " ;" après une parenthèse.
Dans ce cas, nous avons une erreur explicite, mais le compilateur ne génère même pas d'avertissement.

Rosh,
la page a disparu à nouveau.
 
Encore un essai :

int fut_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)
  {
  if (CorrectPrice(symbol,cmd,price,myCurrentTime))
      {
      TradeOrdersArray[myOrdersTotal,0]= symbol;// записали иструмент
      TradeOrdersArray[myOrdersTotal,1]=pool_pos;// записали номер в списке терминала
      TradeOrdersArray[myOrdersTotal,2]=myOrderTicket+1;// записали номер тикета у брокера
      TradeOrdersArray[myOrdersTotal,3]=cmd;// записали тип ордера
      TradeOrdersArray[myOrdersTotal,4]=volume;// записали размер ордера
      TradeOrdersArray[myOrdersTotal,5]=price;// записали цену открытия
      TradeOrdersArray[myOrdersTotal,6]=slippage;// записали проскальзывание в пунктах
      TradeOrdersArray[myOrdersTotal,7]=stoploss;// записали stoploss
      TradeOrdersArray[myOrdersTotal,8]=stoploss;// записали takeprofit
      TradeOrdersArray[myOrdersTotal,9]=comment;// записали комментарии
      TradeOrdersArray[myOrdersTotal,10]=magic;// записали MagicNumber
      TradeOrdersArray[myOrdersTotal,11]=myCurrentTime;// записали дату выставления/открытия ордера
      DrawArrowOnChart(symbol,myCurrentTime,price,arrow_color);
      myOrderTicket++;
      myOrdersTotal++;
      pool_pos++;
      return(myOrderTicket);
      }
      else return(-1);
  }
//+------------------------------------------------------------------+
 
Il y a une grave erreur dans le texte.
 
Merci, Mak. La brièveté est la sœur du talent.
 
Rosh,
Je voulais juste que Renat l'examine lui-même et trouve l'erreur.
Mais il semble qu'ils ne regardent pas ici ou qu'ils pensent que mon message est stupide.
(citation - "nous ne répondons pas aux questions stupides ..." - :))

Il s'agit des inconvénients de la syntaxe MQL (et/ou du compilateur).
Le compilateur ne répondra pas à cette erreur, même s'il peut vous en avertir.
J'interdirais simplement de telles erreurs dans un langage (conversion implicite de type).

Pour être précis.
Le tableau TradeOrdersArray est de type double.
À plusieurs endroits, vous lui avez attribué des valeurs de chaîne.
Par exemple :
TradeOrdersArray[myOrdersTotal,0]= symbol;


Le compilateur va tout manger, et même le testeur va fonctionner, mais pas comme vous le vouliez.
Et il est difficile de rechercher une telle erreur, surtout si elle a été commise il y a un mois,
et n'est apparu qu'aujourd'hui quand tu as ajouté quelques lignes au programme.

(S'il vous plaît, corrigez le script - la page a disparu, il n'est pas pratique de regarder).

 
Alors comment puis-je définir un tableau pour stocker des données de différents types ?
Voici cette déclaration
string comment=NULL
le compilateur obtient une erreur.
Mais j'ai juste copié du dictionnaire par modèle.
 
Comment définir un tableau pour stocker des données de différents types ?

Je pense que vous ne pouvez pas.
Seulement dans 2 tableaux différents.
Raison: