[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 - 5. - page 179

 
Parce que j'ai la comptabilité de l'ordre dans un tableau. C'est tout peeved.
 
if (!PozyProstavleny){ ArrayResize(Buy,Raz);ArrayResize(Sell,Raz);
   
           Price= (Ask+Dist*Point) ; TP_BUY=(Price+TP*Point);  SL_BUY= (Price- SL*Point);
           Price_SELL= (Bid-Dist*Point) ;  TP_SELL=Price_SELL-TP*Point;  SL_SELL=Price_SELL+SL*Point; K=1;
           
   for(int Raz1=0;Raz1<Raz;Raz1++){
   
           Sleep(2000); RefreshRates();  for(int A=25;A>=0;A--){if(IsTradeAllowed())break;if(A==0) Comment(" эксперту не разрешено 
торговать или поток для выполнения торговых операций занят "); }           
  tyccBuy= OrderSend (Symbol( ), OP_BUYSTOP,  Lot ,NormalizeDouble(Price, Digits), 5, NormalizeDouble( SL_BUY,Digits),  
 NormalizeDouble( TP_BUY,Digits), NULL, 450, 0, CLR_NONE);
   Buy[Raz1]= tyccBuy;
           Price= (Price+Dist*Point) ; TP_BUY= (Price+TP*Point); SL_BUY= (Price- SL*Point);
           Error=GetLastError();
     if (Error!=0){ string errorcomment = "Ошибка открытия ордера байстоп  "  + " " + Symbol() +  " " + ErrorDescript(Error); 
           Print (errorcomment);}
           
           Sleep(2000); RefreshRates();  for( A=25;A>=0;A--){if(IsTradeAllowed())break;if(A==0) Comment(" эксперту не разрешено торговать
 или поток для выполнения торговых операций занят "); }        
           Sell[Raz1]=OrderSend (Symbol( ), OP_SELLSTOP,  Lot ,NormalizeDouble(Price_SELL, Digits), 5, NormalizeDouble( SL_SELL,Digits), 
  NormalizeDouble( TP_SELL,Digits), NULL, 450, 0, CLR_NONE);
     Price_SELL= (Price_SELL -Dist*Point) ;TP_SELL=Price_SELL-TP*Point;   SL_SELL=Price_SELL+SL*Point;
            Error=GetLastError();if (Error==0)
            
            {errorcomment = "Ошибка открытия ордера селлстоп  "  + " " + Symbol() +  " " + ErrorDescript(Error); 
        Print (errorcomment);} PozyProstavleny=1; 
                       }
                       }   
                        
 

Bonne journée à vous tous !

Je suis un nouveau venu. C'est la première fois que j'essaie de mettre une idée en code dans le testeur.

L'idée est simple - ouvrir un ordre alternativement à la hausse et à la baisse au prix d'ouverture de chaque chandelier horaire.

J'ai écrit un code simple .... Mais le problème est que le programme ouvre parfois plus d'un ordre à l'ouverture d'un chandelier.

Il me semble que cela se produit lorsque plus d'un tick se produit en une seconde.

J'ai essayé de mettre dans l'en-tête de la condition if( ) ...

CommandesTotal()==0

Une seule commande s'ouvre réellement.



Mais cette variante ne me convient pas car le lendemain la bougie donnée n'est pas ouverte, puisqu'au moment de l'ouverture de cette bougie

Il y a déjà un nombre aléatoire d'ordres dans le commerce.

J'ai également essayé d'interrompre l'exécution de l'OrderSend(Symbol(),OP_BUY,0.1,Price,3,SL,TP) avec return ; ...... n'a pas aidé.


J'apprécierais que vous me disiez comment faire pour qu'un seul ordre soit ouvert à n'importe quel tick dans une seconde.

int start()

{
double Price=Ask ;
double SL=Price-300*Point ;
double TP=Price+300*Point ;
if( Hour()==10 && Minute()== 00 && Seconds()==00)
OrderSend(Symbol(),OP_BUY,0.1,Price,3,SL,TP) ;
}

 
Et ainsi de suite.
 
Dimka-novitsek:
Je ne sais pas comment, mais les données doivent être sauvegardées.

//записать

void SaveArray(string File, double &a[])
{
    int h = FileOpen(File, FILE_BIN|FILE_WRITE);
    if(h>0)
    {
      int sz = ArraySize(a); 
      FileWriteArray(h,a,0,sz);
      FileClose(h);
    }
}

//прочитать

void OpenArray(string File, double &a[], int sz)
{
    int h = FileOpen(File, FILE_BIN|FILE_READ);
    if(h>0)
    {
      ArrayResize(a,sz);
      FileReadArray(h,a,0,sz);
      FileClose(h);
    }
}
 
solnce600:

Bonne journée à vous tous !

Je suis un nouveau venu. C'est la première fois que j'essaie de mettre une idée en code dans le testeur.

L'idée est simple - ouvrir un ordre alternativement à la hausse et à la baisse au prix d'ouverture de chaque chandelier horaire.

J'ai écrit un code simple .... Mais le problème est que le programme ouvre parfois plus d'un ordre à l'ouverture d'un chandelier.

Il me semble que cela se produit lorsque plus d'un tick se produit en une seconde.

J'ai essayé de mettre dans l'en-tête de la condition if( ) ...

CommandesTotal( )==0

Une seule commande s'ouvre réellement.



Mais cette variante ne me convient pas car le lendemain la bougie donnée n'est pas ouverte, puisqu'au moment de l'ouverture de cette bougie

Il y a déjà un nombre aléatoire d'ordres dans le commerce.

J'ai également essayé d'interrompre l'exécution de l'OrderSend(Symbol(),OP_BUY,0.1,Price,3,SL,TP) avec return ; ...... n'a pas aidé.

J'apprécierais que vous me disiez comment faire pour qu'un seul ordre soit ouvert à n'importe quel tick dans une seconde.

int start()

{
double Price=Ask ;
double SL=Prix-300*Point ;
double TP=Prix+300*Point ;
if( Hour()==10 && Minute()== 00 && Secondes()==00)
OrderSend(Symbol(),OP_BUY,0.1,Price,3,SL,TP) ;
}

Si c'est TechZad, vous êtes dans le job !
 
Merci !!!!!!
 

solnce600:

Je vous serais reconnaissant de me dire comment faire pour qu'en une seconde, seul un ordre soit ouvert sur un tick.

int start()
{
...

int ot=OrdersTotal();

bool open_allowed = true;

if(ot>0)
{
   if(OrderSelect(ot-1,SELECT_BY_POS))
   {
      if(TimeCurrent()-OrderOpenTime()<=1) open_allowed=false;  //если разница между текущим временем сервера и временем открытия последнего ордера 1 секунда или меньше, запретить торговлю
   }
}

if(open_allowed)
{
   //открываемся
}
...
}
 
Bien... En gros, déclarer une variable avant de commencer, se souvenir de l'heure. Après avoir passé une commande, il est égal à, disons, la vérité. Avant de le mettre en place, il faut aussi le vérifier. Je ne suis pas doué pour les variables temporelles. Avant de passer l'ordre, vérifiez si l'heure est supérieure à l'heure réelle si elle est ajoutée à cette variable. Si ce n'est pas plus grand, alors commandez, et rappelez-vous le nouveau temps ! Oui, c'est comme ça que ça se passe. Un peu simple même ! !!
 
solnce600:

Bonne journée à vous tous !

Je suis un nouveau venu. C'est la première fois que j'essaie de mettre une idée en code dans le testeur.

L'idée est simple : ouvrir un ordre au prix d'ouverture de chaque bougie horaire, alternativement à la hausse et à la baisse.

J'ai écrit un code simple .... Mais le problème est que le programme ouvre parfois plus d'un ordre à l'ouverture d'un chandelier.

Il me semble que cela se produit lorsque plus d'un tic se produit en une seconde.

Comme alternative, j'ai essayé de mettre l'en-tête de la condition if( ) ...

CommandesTotal()==0

Une seule commande s'ouvre réellement.



Mais cette variante ne me convient pas car le lendemain le chandelier donné n'est pas ouvert, puisqu'au moment de l'ouverture de ce chandelier

il y a déjà un nombre aléatoire d'ordres dans la transaction.

J'ai également essayé d'interrompre OrderSend(Symbol(),OP_BUY,0.1,Price,3,SL,TP) ; interrompre l'exécution de start() avec return ; ...... n'a pas aidé.


J'apprécierais que vous me disiez comment faire pour qu'un seul ordre soit ouvert à n'importe quel tick dans une seconde.

int start()

{
double Price=Ask ;
double SL=Prix-300*Point ;
double TP=Prix+300*Point ;
if( Hour()==10 && Minute()== 00 && Secondes()==00)
OrderSend(Symbol(),OP_BUY,0.1,Price,3,SL,TP) ;
}

Essayez cette variante :
int TimeNow, TimePrev, PrevType;

int start()   
 {
  double Price,SL,TP;
     int Ticket;

  TimeNow=iTime(NULL,0,0);
  if(TimePrev==TimeNow) return(0);

  if(PrevType!=1) {
   Price=NormalizeDouble(Ask,Digits);    
   SL=NormalizeDouble(Price-300*Point,Digits);    
   TP=NormalizeDouble(Price+300*Point,Digits);
   Ticket=OrderSend(Symbol(),OP_BUY,0.1,Price,3,SL,TP);
   if(Ticket!=-1) { TimePrev=TimeNow; PrevType=1; } }

  else if(PrevType!=-1) {
   Price=NormalizeDouble(Bid,Digits);    
   SL=NormalizeDouble(Price+300*Point,Digits);    
   TP=NormalizeDouble(Price-300*Point,Digits);
   Ticket=OrderSend(Symbol(),OP_SELL,0.1,Price,3,SL,TP);
   if(Ticket!=-1) { TimePrev=TimeNow; PrevType=-1; } }
 }