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

 
ewoke:

Après-midi.

J'ai besoin d'un historique EURUSD m5/m15 d'avant 2009, quelqu'un peut-il partager le sien ? (c'est-à-dire celui sur lequel vous déboguez vos experts).

Je vous en serais très reconnaissant.

Appuyez sur F2 avec votre terminal ouvert, puis allez dans Fx Majors -> EURUSD -> 1 Minute (M1) -> Télécharger.

 
paladin80:
Le crochet ouvrant { doit être placé avant price[...]=Ask ; (voir ci-dessous). Relisez l'opérateur "si". S'il n'y a pas de parenthèse immédiatement après if, il ne gère qu'une seule action (vous avez price[...]=Ask ;), si plusieurs actions sont nécessaires, elles doivent être placées dans {...} immédiatement après if.

Merci. Mais j'ai mis des parenthèses juste après l'instruction if comme vous l'avez suggéré,
mais cela n'a rien changé. Voir la capture d'écran - elle montre que l'EA a ouvert une position d'achat.
et le prix a baissé et a franchi les niveaux de 1.2100 et 1.2200 et les positions par l'opérateur

si pour ouvrir des positions d'achat à 1.2100 et 1.2200 - n'a pas ouvert.


 
alex12:
Merci, mais j'ai mis des parenthèses juste après l'instruction if, comme vous l'avez suggéré,
Voir la capture d'écran - elle montre que le conseiller expert a ouvert une position d'achat.
et le prix a baissé et a franchi les niveaux de 1.2100 et 1.2200 et les positions par la condition d'opérateur

si pour ouvrir des positions d'achat à 1.2100 et 1.2200 - n'a pas ouvert.


N'est-il pas nécessaire de mettre l'opérateur return après ordersend pour terminer le traitement du tick ?
 
alex12:
Merci, mais j'ai mis des parenthèses juste après l'instruction if, comme vous l'avez suggéré,
mais cela n'a rien changé. Voir la capture d'écran - elle montre que l'EA a ouvert une position d'achat
et le prix a baissé et a traversé les niveaux 1.2100 et 1.2200 et les positions selon l'instruction
.

Si pour ouvrir des positions d'achat à 1.2100 et 1.2200 - ils n'ont pas ouvert.

Ouvrez-vous la première position manuellement ou voulez-vous que les ordres en attente soient placés après que le prix ait franchi un certain niveau et ensuite, en fonction de sa présence ? Essayez de cette façon :
if (OrdersTotal()>0)
{  for (int i=OrdersTotal()-1; i>=0; i--)
   {  if (OrderSelect(SELECT_BY_POS,MODE_TRADES)
      {  if (OrderSymbol()!=Symbol())  continue;
         if (OrderType()==OP_BUYLIMIT) return(0);
}  }  }

if (OrdersTotal()>0)
{  for (i=OrdersTotal()-1; i>=0; i--)
   {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {  if (OrderSymbol()!=Symbol()) continue;
         if (OrderType()==OP_BUY)
         {  for (int j=0; j=10-1; j++}
            {  OrderSend (Symbol(),OP_BUYLIMIT,Lot,price[j],10,0,Ask+g*Point,"My order #",11+j);
               Sleep(10*1000);
      }  }  }
}  }
Bien sûr, nous avons toujours besoin d'un traitement des erreurs dans le cas où un ordre en attente est rejeté par DC.
 
OlegTs:
Ne devriez-vous pas mettre l'opérateur return après ordersend pour terminer le traitement du tick ?

Merci. J'ai mis l'opérateur return après ordersend et rien n'a changé.


extern double Lot=1;
int g=20; //тейкпрофит
double price[10];   // Заданный уровень 
//-----------------------
int init()
  {
double price[10];   // объявляем массив из 5 элементов           
price[0] = 1.2100; // обращаемся к первому элементу массива и 
                   // присваиваем ему цену. Обратите внимание 
                   // на то, что индекс первого элемента 
                   // начинается с 0. Это важная особенность,
                   // к которой нужно привыкнуть.   
price[1] = 1.2200;  // обращаемся ко второму элементу 
price[2] = 1.2300;  // и так далее 
price[3] = 1.2400; 
price[4] = 1.2500;
price[5] = 1.2600; 
price[6] = 1.2700;  
price[7] = 1.2800; 
price[8] = 1.2900;
price[9] = 1.3000;  
   return(0);
  }
//---------------
int start()
   {
// начало открытия ордеров 
   if (OrdersTotal()>0)return(0);

   if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==False)//проверка наличия откр.поз
   {
   price[0]=Ask;
   OrderSend (Symbol(),OP_BUY,Lot,1.2100,10,0,Ask+g*Point,"My order #",11);return;
   }
   if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==True)//проверка наличия откр.поз
   {
   price[1]=Ask;
   OrderSend (Symbol(),OP_BUY,Lot,1.2200,10,0,Ask+g*Point,"My order #",12);return;
   }
   if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==True)//проверка наличия откр.поз
   {
   price[2]=Ask;
   OrderSend (Symbol(),OP_BUY,Lot,1.2300,10,0,Ask+g*Point,"My order #",13);return;
   }
   if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==True)//проверка наличия откр.поз
   {
   price[3]=Ask;
   OrderSend (Symbol(),OP_BUY,Lot,1.2400,10,0,Ask+g*Point,"My order #",14);return;
   }
   if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==True)//проверка наличия откр.поз
   {
   price[4]=Ask;
   OrderSend (Symbol(),OP_BUY,Lot,1.2500,10,0,Ask+g*Point,"My order #",15);return;
   }
   if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==True)//проверка наличия откр.поз
   {
   price[5]=Ask;
   OrderSend (Symbol(),OP_BUY,Lot,1.2600,10,0,Ask+g*Point,"My order #",16);return;
   }
   if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==True)//проверка наличия откр.поз
   {
   price[6]=Ask;
   OrderSend (Symbol(),OP_BUY,Lot,1.2700,10,0,Ask+g*Point,"My order #",17);return;
   }
   if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==True)//проверка наличия откр.поз
   {
   price[7]=Ask;
   OrderSend (Symbol(),OP_BUY,Lot,1.2800,10,0,Ask+g*Point,"My order #",18);return;
   }
   if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==True)//проверка наличия откр.поз
   {
   price[8]=Ask;
   OrderSend (Symbol(),OP_BUY,Lot,1.2900,10,0,Ask+g*Point,"My order #",19);return;
   }
   if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==True)//проверка наличия откр.поз
   {
   price[9]=Ask;
   OrderSend (Symbol(),OP_BUY,Lot,1.3000,10,0,Ask+g*Point,"My order #",20);return;
   }
      return(0);
  }
//+------------------------------------------------------------------+
 
paladin80:
Ouvrez-vous la toute première position manuellement ou voulez-vous que les ordres en attente soient ouverts lorsque le prix atteint un certain niveau et ensuite, en fonction de celui-ci ? Essayez ce qui suit :. Bien sûr, nous avons besoin d'un traitement d'erreur supplémentaire au cas où un ordre en attente serait rejeté par DC.

Si le prix atteint un certain niveau, puis ouvre une position aux niveaux définis dans les ordres.

Il s'avère que nous avons une position sur un seul niveau - jusqu'à ce qu'elle soit fermée au même moment.

 
alex12:

...

Une pose à la fois sur le même niveau - jusqu'à ce qu'ils se ferment sur le courant.

Une stratégie risquée, je n'y toucherais pas.
 
paladin80:
Ouvrez-vous la première position manuellement ou voulez-vous que les ordres en attente soient placés après que le prix ait franchi un certain niveau ? Essayez ceci : Il n'y a pas de traitement des erreurs dans le cas où votre société de courtage rejette un ordre en attente.

Merci pour le code astucieux bien sûr, mais comme je ne suis pas un très bon programmeur, je n'ai pas trouvé l'erreur : "}". - parenthèses non fermées

J'ai parcouru votre code dans Notepad++ en zoomant et je n'ai pas pu corriger l'erreur.

Je vois. Je suis intéressé par le code lui-même, pas le TS.

L'erreur '}' est générée. - parenthèses non équilibrées

Je ne sais pas comment le réparer.

extern double Lot=1;
int g=20;          //тейкпрофит
double price[5];   // Заданный уровень 
//-----------------------
int init()
  { 
double price[]={1.2100,1.2200,1.2300,1.2400,1.2500}; // объявляем массив из 5 элементов  
   return(0);
  }
//---------------
int start()
   {
// начало открытия ордеров 
   if (OrdersTotal()>0)return(0);  
   if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==False)//проверка наличия откр.поз
   {
   price[0]=Ask;
   OrderSend (Symbol(),OP_BUY,Lot,1.2100,10,0,Ask+g*Point,"My order #",11);return;
   }
   if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==True)//проверка наличия откр.поз
   {
   price[1]=Ask;
   OrderSend (Symbol(),OP_BUY,Lot,1.2200,10,0,Ask+g*Point,"My order #",12);return;
   }
   if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==True)//проверка наличия откр.поз
   {
   price[2]=Ask;
   OrderSend (Symbol(),OP_BUY,Lot,1.2300,10,0,Ask+g*Point,"My order #",13);return;
   }
   if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==True)//проверка наличия откр.поз
   {
   price[3]=Ask;
   OrderSend (Symbol(),OP_BUY,Lot,1.2400,10,0,Ask+g*Point,"My order #",14);return;
   }
   if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==True)//проверка наличия откр.поз
   {
   price[4]=Ask;
   OrderSend (Symbol(),OP_BUY,Lot,1.2500,10,0,Ask+g*Point,"My order #",15);return;
   }
   if (OrdersTotal()>0)
   {  
   for (int i=OrdersTotal()-1;i>=0;i--)
   {  
   if (OrderSelect(SELECT_BY_POS,MODE_TRADES)
   { 
   if (OrderSymbol()!=Symbol()) continue;
         
   if (OrderType()==OP_BUYLIMIT) return(0);
   } 
   }
   }
   if (OrdersTotal()>0)
   { 
   for (i=OrdersTotal()-1;i>=0;i--)
   {  
   if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
   { 
   if (OrderSymbol()!=Symbol()) continue;
   if (OrderType()==OP_BUY)
   {
   for (int j=0;j=5-1;j++}
   { 
   OrderSend (Symbol(),OP_BUYLIMIT,Lot,price[j],10,0,Ask+g*Point,"My order #",11+j);
   Sleep(10*1000);
   } 
   } 
   }
   } 
   }
      return(0);
   }
//+------------------------------------------------------------------+
 

Pouvez-vous me dire pourquoi l'EA n'ouvre pas de position lors du test, je ne comprends pas pourquoi - je pense avoir écrit le code correctement.

extern double Lot=1;
//--------------------------------------------------------------------
int g=20; //тейкпрофит
double price[5];   // Заданный уровень 
//--------------------------------------------------------------------
int init()
  { 
double price[]={1.2100,1.2200,1.2300,1.2400,1.2500}; // объявляем массив из 5 элементов  
   return(0);
  }
//---------------
int start()
   {
   double WMA0=iEnvelopes(NULL,0,1,MODE_SMMA,0,PRICE_WEIGHTED,0.001,MODE_PLUSDI,0);
   double WMA1=iEnvelopes(NULL,0,1,MODE_SMMA,0,PRICE_WEIGHTED,0.001,MODE_PLUSDI,0);
   double WMA2=iEnvelopes(NULL,0,1,MODE_SMMA,0,PRICE_WEIGHTED,0.001,MODE_PLUSDI,0);
   double WMA3=iEnvelopes(NULL,0,1,MODE_SMMA,0,PRICE_WEIGHTED,0.001,MODE_PLUSDI,0);
   double WMA4=iEnvelopes(NULL,0,1,MODE_SMMA,0,PRICE_WEIGHTED,0.001,MODE_PLUSDI,0);

   // начало открытия ордеров 
   if (OrdersTotal()>0)return(0);// не открывает новые пока не закроются открытые
   
   if (price[0]<WMA0&&price[0]>WMA0) //Buy
   {                           
   price[0]=Ask;
   OrderSend (Symbol(),OP_BUY,Lot,1.2100,10,0,Ask+g*Point,"My order #",1);return;
   }
   else
      if (price[1]<WMA1&&price[1]>WMA1) //Buy
   {                           
   price[1]=Ask;
   OrderSend (Symbol(),OP_BUY,Lot,1.2200,10,0,Ask+g*Point,"My order #",2);return;
   }
   else
      if (price[2]<WMA2&&price[2]>WMA2) //Buy
   {                           
   price[2]=Ask;
   OrderSend (Symbol(),OP_BUY,Lot,1.2300,10,0,Ask+g*Point,"My order #",3);return;
   }
   else
      if (price[3]<WMA3&&price[3]>WMA3) //Buy
   {                           
   price[3]=Ask;
   OrderSend (Symbol(),OP_BUY,Lot,1.2400,10,0,Ask+g*Point,"My order #",4);return;
   }
   else
      if (price[4]<WMA4&&price[4]>WMA4) //Buy
   {                           
   price[4]=Ask;
   OrderSend (Symbol(),OP_BUY,Lot,1.2500,10,0,Ask+g*Point,"My order #",5);return;
   }

return(0);
} 
/////////////////////////////////////////////////////////////////////////////////////////
 
alex12:

Pouvez-vous me dire pourquoi l'EA n'ouvre pas de position lors du test, je ne sais pas pourquoi - je pense avoir écrit le code correctement.


Lors de l'ouverture d'un ordre au marché (OP_SELL ou OP_BUY), seuls les derniers cours acheteur (pour la vente) ou vendeur (pour l'achat) peuvent être utilisés comme cours d'ouverture.

quelque chose comme ça.