[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 416

 
vegetate писал(а) >>

Pouvez-vous me dire comment passer une dimension d'un tableau à deux dimensions à une fonction ?

Je suis confus à propos de quelque chose.

int testarray[5][2] = {1,2,3,4,5,6,7,8,9,10};// хоть так и можно записать, но в уме нужно держать что это ТАБЛИЦА

void testfunc(int &inarray[][]){ // массив нужно передавать "как есть", но обрабатывать можно выбранную часть
string out_str="Result: "+inarray[i,0];

for (int i=1;i<5;i++){// еще нужно учитывать, что счет в массивах начинается с НУЛЯ. "первый - нулевой"
out_str += (", "+inarray[i,0]); // здесь бы использовал строковую функцию конкатенации
}
Print(out_str);
}
//+------------------------------------------------------------------+
//| script program start function |
//+------------------------------------------------------------------+
int start()
{
//----
Print("Call first:");
testfunc(testarray);
Print("Call second:");
testfunc(testarray);
//----
return(0);
}
//+-----------

 

J'ai deux copies de la plateforme du même courtier. Chacun dispose de son propre compte de démonstration et d'un dossier partagé appelé "experts".

Si j'ouvre le premier, puis le ferme, puis ouvre le second, je dois à nouveau entrer le mot de passe dans le second.

Je ferme le second et ouvre le premier - maintenant j'ai besoin du mot de passe pour le premier. C'est censé être comme ça ?

Merci !

 
Necron писал(а) >>

high=iHigh(NULL,60,1) ; Ou quelque chose ne va pas ?

Tout est correct. Mais si vous voulez utiliser plusieurs échéances ou symboles, vous devez créer une logique correspondante dans votre EA.

 
Vinin >>:

Все правильно конечно. Но если нужно использовать несколько таймфреймов или инструментов, то нужно делать соотвествующую логику в советнике.

OK, je vais y réfléchir. Merci !

 

C'est encore moi... Ne me grondez pas trop... J'ai environ deux semaines d'expérience avec les EA...

J'ai fait en sorte que mon EA se déplace par fractales mais il continue à montrer OrderModify error 1 dans mon log pendant le test, bien que mon élan se déplace par fractales tout le temps. J'ai utilisé la fonction FindNearFractal de Kim. Le code est le suivant :

   for( cnt=0; cnt< total; cnt++)
     {
      OrderSelect( cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()<=OP_SELL &&   // check for opened position
         OrderSymbol()==Symbol())  // check for symbol
        {
         if(OrderType()==OP_BUY)   // long position is opened
           {
           // check for trailing stop
            if( TrailFractal)
              {
               OrderModify(OrderTicket(),OrderOpenPrice(), FindNearFractal(NULL,0,MODE_LOWER),0,0,Green);
                     return(0);
                            }
           }
         else // go to short position
           {
            // check for trailing stop
            if( TrailFractal)
              {              
                     OrderModify(OrderTicket(),OrderOpenPrice(), FindNearFractal(NULL,0,MODE_UPPER),0,0,Red);
                     return(0);
               
              }
           }
        }
Et sur les ajouts une autre question. Le code est le suivant :
     for(int i = 0; i < OrdersTotal(); i++)
   {
      // выбор ордера
      if(OrderSelect( i, SELECT_BY_POS) == false) continue;
      // not current symbol
      if(OrderSymbol() != Symbol()) continue;
  }
if(OrderType() == OP_SELL)
{
//при профите >20 pips добавится или докупится ...
 if(OrderProfit()>20)//////если поставить другое условие открывает много позиций
 OrderSend(Symbol(),OP_SELL, Lots,Bid,3, sl_sell,0,"Ma+Fr",16384,0,Red);
  PeriodForSleep=((Time[0]-Time[1])-(TimeCurrent()-Time[0]))*1000; 
Sleep( PeriodForSleep);
}
if(OrderType() == OP_BUY)
{
//при профите >20 pips добавится или докупится ...
 if(OrderProfit()>20)//////если поставить другое условие открывает много позиций
 OrderSend(Symbol(),OP_BUY, Lots,Ask,3, sl_buy,0,"Ma+Fr",16384,0,Lime);
   Sleep( PeriodForSleep);
}
Si je définis une percée fractale (ou tout autre signal) au lieu de OrderProfit()>20 dans la condition d'ajout, cela ouvre de nombreuses positions. J'ai essayé d'ajouter Sleep()-cela n' aide pas. Quel est le problème ici ?
 

L'erreur 1 de OrderModify se produit généralement lorsque les nouveaux paramètres correspondent exactement à ceux de la commande...

 
keekkenen >>:

обычно OrderModify error 1 бывает, когда новые параметры точно соответствуют тем, что в ордере..

Merci, keekkenen ! Les paramètres sont différents. La réponse se trouve ici. Le conseil (dans la branche) est de clouer cette erreur... NormalizeDouble n'aide pas non plus.

Et que dire de la deuxième erreur (sur les ajouts) ?

 
comment les EA savent-ils combien de bénéfices papier, c'est-à-dire de bénéfices sur les positions non fermées, il y a en ce moment ?
 
dmmikl86 писал(а) >>
comment trouver le montant du bénéfice papier, c'est-à-dire le bénéfice sur les positions non fermées, qui se trouve actuellement dans l'EA ?

KimIV dispose de la fonction GetProfitOpenPosInPoint().

 
khorosh >>:

У KimIV есть функция GetProfitOpenPosInPoint().

Puis-je le faire de cette manière, et cela fonctionnera-t-il ?

extern double Level_Profit = 200;

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   double paper_money = AccountEquity()-AccountBalance();
   if ( paper_money > Level_Profit)
      {
       #include "scripts\s_close_all.mq4"
      }
//----
   return(0);
  }
//+------------------------------------------------------------------+

ou serait-il préférable d'insérer le code du script dans l'EA ?