[Archive] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 2. - page 441

 

Bonjour à tous !

Je n'arrive pas à faire en sorte que le dépôt se charge correctement dans le rapport de négociation. )) Je fais ça :

#define RA 10000

if(Trade_Report == TRUE && !IsOptimization())
   {  int      pos;
      int      handle;
      int      Days;
      double   Swap_M;
      double   Profit_M;
      double   Swap_P;
      double   Profit_P;

      double   Source_LP[RA], LP_01[RA], LP_02[RA], LP_03[RA], LP_04[RA], LP_05[RA], LP_06[RA];
      double   Source_LP_02[RA], LP_01_02[RA], LP_02_02[RA], LP_03_02[RA], LP_04_02[RA], LP_05_02[RA], LP_06_02[RA];
      double   Source_SP[RA], SP_01[RA], SP_02[RA], SP_03[RA], SP_04[RA], SP_05[RA], SP_06[RA];
      double   Source_SP_02[RA], SP_01_02[RA], SP_02_02[RA], SP_03_02[RA], SP_04_02[RA], SP_05_02[RA], SP_06_02[RA];
      double   Load_Depo[RA]; 
   
      handle = FileOpen("OrdersReport.csv",FILE_CSV|FILE_WRITE);
   
      if(handle > 0)
                {//1
            FileWrite(handle,"Time Close"+","+"Lots"+","
                              +"Swap($)"+","+"Profit($)"+","+"Swap(p)"+","+"Profit(p)"+","+"Load Depo"+","
                              +"SOURCE_LP"+","+"LP#01"+","+"LP#02"+","+"LP#03"+","+"LP#04"+","+"LP#05"+","+"LP#06"+","
                              +"SOURCE_SP"+","+"SP#01"+","+"SP#02"+","+"SP#03"+","+"SP#04"+","+"SP#05"+","+"SP#06");
            for(pos = 0; pos < OrdersHistoryTotal(); pos++)
               {  OrderSelect(pos,SELECT_BY_POS,MODE_HISTORY); //2
               
                  if(OrderType() == OP_BUY && OrderMagicNumber() == Magic_Source_LP && OrderCloseTime() == TimeCurrent()) { Source_LP[pos] = OrderProfit(); }
                  if(OrderType() == OP_BUY && OrderMagicNumber() == Magic_LP01 && OrderCloseTime() == TimeCurrent()) { LP_01[pos] = OrderProfit(); }
                  if(OrderType() == OP_BUY && OrderMagicNumber() == Magic_LP02 && OrderCloseTime() == TimeCurrent()) { LP_02[pos] = OrderProfit(); }
                  if(OrderType() == OP_BUY && OrderMagicNumber() == Magic_LP03 && OrderCloseTime() == TimeCurrent()) { LP_03[pos] = OrderProfit(); }
                  if(OrderType() == OP_BUY && OrderMagicNumber() == Magic_LP04 && OrderCloseTime() == TimeCurrent()) { LP_04[pos] = OrderProfit(); }
                  if(OrderType() == OP_BUY && OrderMagicNumber() == Magic_LP05 && OrderCloseTime() == TimeCurrent()) { LP_05[pos] = OrderProfit(); }
                  if(OrderType() == OP_BUY && OrderMagicNumber() == Magic_LP06 && OrderCloseTime() == TimeCurrent()) { LP_06[pos] = OrderProfit(); }
                     
                  if(OrderType() == OP_SELL && OrderMagicNumber() == Magic_Source_SP && OrderCloseTime() == TimeCurrent()) { Source_SP[pos] = OrderProfit(); }
                  if(OrderType() == OP_SELL && OrderMagicNumber() == Magic_SP01 && OrderCloseTime() == TimeCurrent()) { SP_01[pos] = OrderProfit(); }
                  if(OrderType() == OP_SELL && OrderMagicNumber() == Magic_SP02 && OrderCloseTime() == TimeCurrent()) { SP_02[pos] = OrderProfit(); }
                  if(OrderType() == OP_SELL && OrderMagicNumber() == Magic_SP03 && OrderCloseTime() == TimeCurrent()) { SP_03[pos] = OrderProfit(); }
                  if(OrderType() == OP_SELL && OrderMagicNumber() == Magic_SP04 && OrderCloseTime() == TimeCurrent()) { SP_04[pos] = OrderProfit(); }
                  if(OrderType() == OP_SELL && OrderMagicNumber() == Magic_SP05 && OrderCloseTime() == TimeCurrent()) { SP_05[pos] = OrderProfit(); }
                  if(OrderType() == OP_SELL && OrderMagicNumber() == Magic_SP06 && OrderCloseTime() == TimeCurrent()) { SP_06[pos] = OrderProfit(); }
                  
            //--- Вычисление загрузки депозита ---//
                  int              Amount_LD;
                  datetime         CurrentCloseTime = OrderCloseTime();
                  static datetime  CloseTime;                  
                  
                  if(CurrentCloseTime != CloseTime)
                     { Amount_LD = 1;
                       Load_Depo[pos] = (Amount_LD*(OrderLots()*1000)/AccountBalance())*100;
                       CloseTime = OrderCloseTime(); }
                  else if(CurrentCloseTime == CloseTime)
                          { Amount_LD++;
                            Load_Depo[pos] = (Amount_LD*(OrderLots()*1000)/AccountBalance())*100;
                            CloseTime = OrderCloseTime(); }
            //---------------------------------------------------------------------------------------------------------------------
                     
                  Swap_M     =  OrderSwap();
                  Profit_M   =  OrderProfit();
                  Swap_P     = (OrderSwap()/10)/OrderLots();
                  Profit_P   = (OrderProfit()/10)/OrderLots()+(OrderSwap()/10)/OrderLots();
                     
                  if(OrderType() == OP_BUY || OrderType() == OP_SELL)
                     {   FileWrite(handle,TimeToStr(OrderCloseTime(),TIME_DATE|TIME_MINUTES)+","+DoubleToStr(OrderLots(),2)+"," //3
                                          
                                          +DoubleToStr(OrderSwap(),2)+","+DoubleToStr(Profit_M+Swap_M,2)+","+DoubleToStr(Swap_P,2)+","
                                          +DoubleToStr(Profit_P,2)+","+DoubleToStr(Load_Depo[pos],2)+","
                                          
                                          +DoubleToStr(Source_LP[pos],2)+","+DoubleToStr(LP_01[pos],2)+","+DoubleToStr(LP_02[pos],2)+","
                                          +DoubleToStr(LP_03[pos],2)+","
                                          +DoubleToStr(LP_04[pos],2)+","+DoubleToStr(LP_05[pos],2)+","+DoubleToStr(LP_06[pos],2)+","
                                             
                                          +DoubleToStr(Source_SP[pos],2)+","+DoubleToStr(SP_01[pos],2)+","+DoubleToStr(SP_02[pos],2)+","
                                          +DoubleToStr(SP_03[pos],2)+","
                                          +DoubleToStr(SP_04[pos],2)+","+DoubleToStr(SP_05[pos],2)+","+DoubleToStr(SP_06[pos],2));  } //3
               }  FileClose(handle); //2
         }//1

Par conséquent, il n'est pas calculé correctement au départ. Les valeurs dans le tableau Load_Depo changent constamment et le besoin, que les positions ouvertes aussi ont été considérés. Montrez-moi un exemple, quelqu'un, si vous avez une minute de libre. ))

 
demlin:
Honnêtement, je ne comprends pas, c'est tellement compliqué))))
Même les exemples du script de test ne vous aident pas ?
 
FreeSerfer:

Merci, le point est clair, je suis désolé que je ne sois pas très bon avec le langage de programmation.

Supposons :

Bleu - numéro 0 - signal d'achat

Rouge - numéro 1 - signal de vente

et une autre question, la flèche peut clignoter alors qu'elle forme une barre au-dessus de laquelle elle peut se verrouiller et donner un signal. Les transactions doivent être ouvertes après la formation du signal.

Quelqu'un peut-il implémenter cela en code ?

Vous étudiez la programmation ou vous cherchez quelqu'un pour le faire à votre place ?

Victor a déjà expliqué qu'il fallait utiliser la fonction iCustom(). Pour en savoir plus, consultez l'aide de MetaEditor. Elle y est très détaillée. Pour éviter un "flutter" - utilisez dans iCustom() les données de la première barre au lieu de zéro - elle a déjà été complètement formée.

Lorsque vous commencerez à écrire quelque chose vous-même, vous serez heureux d'obtenir de l'aide et des corrections ici...

 
artmedia70:

Vous apprenez à programmer ou vous cherchez quelqu'un pour le faire à votre place ?

Victor vous a déjà fait comprendre que vous devez utiliser la fonction iCustom(). Pour en savoir plus, consultez l'aide de MetaEditor. Elle y est très détaillée. Pour se débarrasser du "chatter" - utilisez les données de la première barre au lieu de la barre zéro dans iCustom() - elle a déjà été complètement formée.

Quand vous commencez à écrire quelque chose vous-même, alors ils vous aideront ici avec plaisir et corrigeront tout...

J'écris moi-même, bien que ce soit difficile pour moi, et la seule chose qui reste est la liaison de l'Expert Advisor à l'indicateur, bien que grâce à Victor cela sera bientôt résolu avec mes propres efforts. En tout cas, merci à tous ceux qui ont répondu et indiqué la direction à prendre.
 
peshihod:

Il peut y avoir d'innombrables options. Il est préférable de choisir les plus simples. Par exemple :


int Orderov;
int Tip;

//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
int i,k;

Orderov=OrdersTotal();

for(i=0;i<Orderov;i++)
{
OrderSelect(i,SELECT_BY_POS);

switch( OrderType() )
{
case OP_BUY:
//Задача для ордера типа OP_BUY
break;

case OP_SELL:
//Задача для ордера типа OP_BUY
break;

case OP_BUYLIMIT:
//Задача для ордера типа OP_BUY
break;

/////------ и т.д.




}
}

return(0);
}

Aide.... Répondre à la question ..............

C'est la partie qui est déclenchée à chaque tic-tac.

case OP_BUY:
//Задача для ордера типа OP_BUY
break;

case OP_SELL:
//Задача для ордера типа OP_BUY
break;


Et il ne doit être déclenché qu'une seule fois, à chaque nouvelle commande ouverte.

Peut-être faut-il ajouter un compteur, par tics, magies ou autre identifiant de commande ?

----------------------------------------------------------------------------------------

Doit-on créer une variable Orderov ?
Je peux le faire comme ça ?

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

Avez-vous besoin d'une variable "k" dans le script ?

int i,k;

 
Zhunko:
Que même les exemples du script de test n'aident pas ?
Merci pour le feedback, j'ai contourné le problème d'une manière différente et plus simple ;))
 
semiromid:

C'est la partie qui est déclenchée à chaque tic.

case OP_BUY:
//Задача для ордера типа OP_BUY
break;

case OP_SELL:
//Задача для ордера типа OP_BUY
break;


Et il ne doit être déclenché qu'une seule fois à chaque nouvel ordre ouvert.

Peut-être qu'il devrait y avoir un compteur attaché, par ticks, magiks ou autre identifiant d'ordre ?

----------------------------------------------------------------------------------------

Doit-on faire une variable Orderov ?
Peut-on le faire de cette façon ?

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

Le script a besoin d'une variable "k" ?

Vous avez tout faux.

Vous essayez de composer de la poésie en allemand sans en connaître un mot. Est-ce que je me fais bien comprendre ?

Lisez la référence, apprenez toutes les fonctions et propriétés de la langue. Ça vous prendra quelques mois. Utilisez les exemples qui sont inclus dans l'installation de MetaTrader4. Alors nous parlerons. Vous ne savez pas encore de quoi nous parlons.

 
peshihod:

Vous avez tout faux.

Essayer de composer des poèmes en allemand sans en connaître un seul mot. Est-ce que je me fais bien comprendre ?

Lisez la référence, apprenez toutes les fonctions et propriétés de la langue. Ça vous prendra quelques mois. Utilisez les exemples qui sont inclus dans l'installation de MetaTrader4. Alors nous parlerons. Vous ne savez pas encore de quoi nous parlons.


Je suis un débutant en programmation, et je n'ai pas de professeurs. Et s'il vous est difficile de répondre aux questions qui sont importantes pour moi, vous auriez pu ne rien m'écrire.

Et je m'adresse à vous en tant que vous, en fait......

 
semiromid:


Je suis un débutant en programmation, et je n'ai pas de professeurs. S'il vous est difficile de répondre aux questions qui sont importantes pour moi, vous auriez pu ne rien m'écrire.

Et je m'adresse à vous en tant que vous, en fait......


Je suis désolé.

J'ai écrit sur le fait qu'on ne peut pas apprendre à nager sur le rivage.

 
peshihod:


Excusez-moi.

J'ai écrit sur le fait qu'on ne peut pas apprendre à nager sur le rivage.


Parfois, il faut poser des questions pour comprendre quelque chose.

int Orderov;
int Tip;

//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
int i,k;

Orderov=OrdersTotal();

for(i=0;i<Orderov;i++)
{
OrderSelect(i,SELECT_BY_POS);

switch( OrderType() )
{
case OP_BUY:
//Задача для ордера типа OP_BUY
break;

case OP_SELL:
//Задача для ордера типа OP_BUY
break;

case OP_BUYLIMIT:
//Задача для ордера типа OP_BUY
break;

/////------ и т.д.




}
}

return(0);
}

Aide.... Répondre à la question ..............

C'est la partie qui déclenche chaque tic.

case OP_BUY:
//Задача для ордера типа OP_BUY
break;

case OP_SELL:
//Задача для ордера типа OP_BUY
break;


Il ne devrait être déclenché qu'une seule fois, à chaque fois qu'un nouvel ordre est ouvert.

J'ai peut-être besoin d'attacher des compteurs, par ticks, magiks ou autres identifiants d'ordres, ou peut-être des tableaux ? Je ne sais pas ce que ça a à voir avec ça, je ne peux pas avancer tant que je n'ai pas compris.

----------------------------------------------------------------------------------------

Doit-on faire une variable Orderov ?
Je peux le faire comme ça ?

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

Le script a-t-il besoin d'une variable "k" ?

int i,k;