[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 964

 
volshebnik:
Pourquoi la vitesse du testeur diminue-t-elle vers la fin de la troisième année ?


il y a un tel problème - j'ai eu ce problème aussi, si le conseiller expert fait beaucoup de transactions par an - peut-être que beaucoup de données sont stockées pour l'affichage du résultat final ou peut-être que les tampons de l'indicateur consomment de la mémoire

pour l'ensemble de la scie - je ne sais pas, soyez indulgent avec moi - pour la vue d'ensemble, le test pour 10 ans, et il est préférable d'optimiser une année à la fois et ensuite faire une sélection des paramètres optimaux

 

Je veux analyser différents croisements puis passer des ordres sur une autre paire :

int magic = 428;//numéro magique de l'Expert Advisor
extern double volume = 0.1;//volume de l'ordre passé
extern int slippage = 3;//slippage
int OPB;//la marque de l'ordre d'achat
int OPS;//le marquage de l'ordre de vente
int Profit=1;//niveau de profit de l'ordre ouvert
string comB = "Entrée dans la tendance à l'achat ; // commentaire sur l'ordre
string comS = "Entrée par tendance à vendre";// commentaire d'ordre
double StochasticCAD;//position de la ligne stochastique principale sur la barre courante sur USDCAD
double StochasticAUD;//position de la ligne stochastique principale sur la barre actuelle pour AUDUSD

double SARCAD;//position de l'indicateur actuel sur USDCAD
double SARCAD;//position de la barre d'indicateur de retour sur USDCAD
double SARAUD;//position actuelle de l'indicateur sur AUDUSD
double SARСAUD;//position de la barre d'indicateur de retour sur AUDUSD


int start()
{

//______________________________определение значений переменных_______________________


StochasticCAD = iStochastic("USDCAD",30,5,3,3,1,1,0,0) ;
StochasticAUD = iStochastic("AUDUSD",30,5,3,3,1,1,1,0) ;

SARCAD=iSAR("USDCAD",30,0.02,0.2,0);
SARСCAD=iSAR("USDCAD",30,0.02,0.2,1);
SARAUD=iSAR("AUDUSD",30,0.02,0.2,0);
SARСAUD=iSAR("AUDUSD",30,0.02,0.2,1);

double bidCAD =MarketInfo("USDCAD",MODE_BID) ;
double askCAD =MarketInfo("USDCAD",MODE_ASK) ;
double bidAUD =MarketInfo("AUDUSD",MODE_BID) ;
double askAUD =MarketInfo("AUDUSD",MODE_ASK) ;




//______________________________поиск и закрытие ордеров_______________________________________


int i ;
for(i=0 ; i<=OrdersTotal() ; i++)
{
si(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)
break;// si le numéro de commande i n'existe pas, arrêter la recherche

if (OrderSymbol() != "GBPUSD" || OrderMagicNumber() != magic) // si l'ordre ne provient pas de la paire où se trouve notre EA
continuez ; // sautez la commande et regardez la prochaine commande qui la suit


//_______close Buy_______
si (OrderType() == OP_BUY && OrderProfit()>=Profit)
// si la commande est Acheter
{
OPB=1 ;
if(StochasticCAD==0 || StochasticAUD==100 || SARCAD<bidCAD || SARAUD>askAUD)//et le marché est sur le point de s'inverser
{
OrderClose(OrderTicket(),OrderLots(),Bid,slippage,Wheat) ; // le fermer s'il est en bénéfice
OPB=0 ;
}
}
sinon
{
//_______close Vendre_______
if(OrderType() == OP_SELL && OrderProfit()>=Profit)// si l'ordre est vendu
{OPS=1 ;
if(StochasticCAD==100 || StochasticAUD==0 || SARCAD>askCAD || SARAUD<bidAUD)//et le marché est proche du renversement de tendance
{
OrderClose(OrderTicket(),OrderLots(),Ask,slippage,PaleTurquoise) ; // fermez-le s'il est en profit.
OPS=0 ;
}
}
}
}

//______________выставление ордеров______________________________________________________________________


if (SARCAD>askCAD && SARCAD<bidCAD && SARAUD<bidAUD && SARCAUD>askAUD && OPB<1)//définir les conditions

{ //_______Buy_______

if(!IsTradeAllowed())
{
Alert("le fil de discussion est occupé, essayez à nouveau d'acheter...") ;
retour(-1) ;
}
OPB =OrderSend("GBPUSD",OP_BUY,volume,Ask,slippage,0,0,comB,magic,0,Red) ; //définir un ordre

si(OPB == -1)
{
Alert("GBPUSD", "Error : buy", GetLastError()) ;
retour(-1) ;
}

si(OPB > 1)
Alert("GBPUSD", "Nous avons un ordre d'achat !)

}
sinon
{//_______Sell_______

if(SARCAD>askCAD && SARCAD<bidCAD && SARCADAUD<bidAUD && SARAUD>askAUD && OPS<1)//définir les conditions

{

if(!IsTradeAllowed())
{
Alert("le fil de discussion est occupé, essayez à nouveau de vendre...") ;
retour (-1) ;
}

OPS=OrderSend("GBPUSD",OP_SELL,volume,Bid,slippage,0,0,comS,magic,0,Blue) ; //définir un ordre


si(OPS == -1)
{
Alert("GBPUSD", "Error : Sell", GetLastError()) ;
retour (-1) ;
}

si(OPS > 1)
Alert("GBPUSD", "Ordre de vente put !)

}
}
return(0);//sortir
}


Rien ne sort quand je le teste. Aucun résultat.

Dans le journal, il y a une série d'erreurs :

Pouvez-vous me dire ce qui ne va pas ?

 
ViktorF:

Je veux analyser différents croisements et ensuite passer des ordres sur une autre paire :

int magic = 428;//numéro magique de l'Expert Advisor
extern double volume = 0.1;//volume de l'ordre placé
extern int slippage = 3;//slippage
int OPB;//étiquette de l'ordre d'achat placé
int OPS;//étiquette de l'ordre de vente placé
int Profit=1;//niveau de profit des ordres ouverts
string comB = "Entrée par tendance à l'achat" ; //demande d'ordre
string comS = "Entrée par tendance à la vente" ; //demande d'ordre
double StochasticCAD ;//position de la ligne principale de la Stochastique sur la barre actuelle de l'USDCAD
double StochasticAUD;//position de la ligne principale de la Stochastique sur la barre actuelle de l'AUDUSD

double SARCAD;//position actuelle de l'indicateur sur l'USDCAD
double SARCAD;//position de la barre de l'indicateur sur l'USDCAD
double SARAUD;//position actuelle de l'indicateur sur l'AUDUSD
double SARAUD;//position de la barre de l'indicateur sur l'AUDUSD


int start()
{{



//______________________________ détermination des valeurs des variables_______________________


StochasticCAD = iStochastic("USDCAD",30,5,3,3,1,1,0,0) ;
StochasticAUD = iStochastic("AUDUSD",30,5,3,3,1,1,1,0) ;

SARCAD=iSAR("USDCAD",30,002,0.2,0) ;
SARCAD=iSAR("USDCAD",30,0.02,0.2,1) ;
SARAUD=iSAR("AUDUSD",30,0.02,0.2,0) ;
SARAUD=iSAR("AUDUSD",30,0.02,0.2,1) ;

double bidCAD =MarketInfo("USDCAD",MODE_BID) ;
double askCAD =MarketInfo("USDCAD",MODE_ASK) ;
double bidAUD =MarketInfo("AUDUSD",MODE_BID) ;
double askAUD =MarketInfo("AUDUSD",MODE_ASK) ;




//______________________________ ordres de recherche et de clôture_______________________________________


int i ;
for(i=0 ; i<=OrdersTotal() ; i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)
break;// si le numéro d'ordre i n'existe pas, arrêter la recherche

if (OrderSymbol() !="GBPUSD" || OrderMagicNumber() != magic) // si l'ordre ne provient pas de la paire où se trouve notre Expert Advisor
continuer ; // sauter cet ordre et regarder l'ordre qui le suit


//_______close Buy_______
if (OrderType() == OP_BUY && OrderProfit()>=Profit)
// si l'ordre est BUY
{
OPB=1 ;
if(StochasticCAD==0 || StochasticAUD==100 || SARCAD<bidCAD || SARAUD>askAUD)//et le marché est proche du retournement
{
OrderClose(OrderTicket(),OrderLots(),Bid,slippage,Wheat) ; // le fermer s'il est BUY
OPB=0 ;
}
}
else
{
//_______close Sell_______
if(OrderType() == OP_SELL && OrderProfit()>=Profit)// si l'ordre est Sell
{OPS=1 ;
if(StochasticCAD==100 || StochasticAUD==0 || SARCAD>askCAD || SARAUD<bidAUD)//et le marché est proche d'un retournement
{
OrderClose(OrderTicket(),OrderLots(),Ask,slippage,PaleTurquoise) ; // le fermer s'il est en profit
OPS=0 ;
}
}
}
}

//______________ passation de commande ______________________________________________________________________


if (SARCAD>askCAD && SARCAD<bidCAD && SARAUD<bidAUD && SARAUD>askAUD && OPB<1)// définir les conditions

{ //_______Buy_______

if(!IsTradeAllowed())
{
Alert("le fil de discussion est occupé, essayez à nouveau d'acheter...") ;
return(-1) ;
}
OPB =OrderSend("GBPUSD",OP_BUY,volume,Ask,slippage,0,0,comB,magic,0,Red) ; //définir l'ordre

if(OPB == -1)
{
Alert("GBPUSD", "error : buy", GetLastError()) ;
return(-1) ;
}

if(OPB > 1)
Alert ("GBPUSD", "Put Buy Order !") ;

}
else
{//_______Sell_______

if(SARCAD>askCAD && SARCAD<bidCAD && SARCAD<bidAUD && SARAUD>askAUD && OPS<1)//definir les conditions

{

if(!IsTradeAllowed())
{
Alert("le fil de discussion est occupé, essayez à nouveau de vendre...") ;
return(-1) ;
}

OPS=OrderSend("GBPUSD",OP_SELL,volume,Bid,slippage,0,0,comS,magic,0,Blue) ; //définir l'ordre


if(OPS == -1)
{
Alert("GBPUSD", "error : sell", GetLastError()) ;
return(-1) ;
}

if(OPS > 1)
Alert ("GBPUSD", "Put Sell order !") ;

}
}
return(0);//sortir
}


Rien ne sort quand on le teste. Il ne produit aucun résultat.

Il y a une série d'erreurs dans le journal :

Pouvez-vous me dire ce qui ne va pas ?


Tout d'abord, apprenez à insérer un code dans la fenêtre en appuyant simultanément sur "Counterclick + Alt + M", afin que dans votre halimatry les gens naviguent et donnent des recommandations.

Essayez également de double-cliquer sur le message d'erreur correspondant dans le journal - peut-être cela mènera-t-il à une réflexion...

 
Roman.:


Tout d'abord, apprenez à insérer du code dans une fenêtre en appuyant simultanément sur les touches "Conrle + Alt + M", afin de pouvoir guider les gens dans vos bêtises et leur faire des recommandations.

Essayez également de double-cliquer sur le message d'erreur correspondant dans le journal de bord - cela vous donnera peut-être des idées...


Les erreurs sont dans le journal du testeur, pas dans celui du compilateur... (vous pouvez en fait le voir sur la photo si vous la regardez d'abord et la commentez ensuite...). Un double-clic n'y fait rien...

 
int magic = 428;//магический номер эксперта
extern double volume = 0.1;//объем выставляемого ордера
extern int slippage = 3;//проскальзывание
int OPB;//метка выставляемого ордера на покупку
int OPS;//метка выставляемого ордера на продажу
int Profit=1;//уровень профита открытых ордеров
string comB = "Вход по тренду на Buy";//комментарий ордера
string comS = "Вход по тренду на Sell";//комментарий ордера
double StochasticCAD;//положение основной линии Стохастики на текущем баре по USDCAD
double StochasticAUD;//положение основной линии Стохастики на текущем баре по AUDUSD

double SARCAD;//текущее положение индикатора по USDCAD
double SARСCAD;//положение индикатора бар назад по USDCAD
double SARAUD;//текущее положение индикатора по AUDUSD
double SARСAUD;//положение индикатора бар назад по AUDUSD

double bidCAD;
double askCAD;
double bidAUD;
double askAUD;

int start()
  {
  
//______________________________определение значений переменных_______________________ 


      StochasticCAD = iStochastic("USDCAD",30,5,3,3,1,1,0,0); 
      StochasticAUD = iStochastic("AUDUSD",30,5,3,3,1,1,1,0);
      
      SARCAD=iSAR("USDCAD",30,0.02,0.2,0);
      SARСCAD=iSAR("USDCAD",30,0.02,0.2,1);
      SARAUD=iSAR("AUDUSD",30,0.02,0.2,0);
      SARСAUD=iSAR("AUDUSD",30,0.02,0.2,1);
      
      bidCAD   =MarketInfo("USDCAD",MODE_BID);
      askCAD   =MarketInfo("USDCAD",MODE_ASK);
      bidAUD   =MarketInfo("AUDUSD",MODE_BID);
      askAUD   =MarketInfo("AUDUSD",MODE_ASK);


      

//______________________________поиск и закрытие ордеров_______________________________________   
    

    int i;
    for(i=0; i<=OrdersTotal(); i++)
    {
     if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)
     break;// если ордер номер i не существует, прекращаем перебор
  
        if (OrderSymbol() != "GBPUSD" || OrderMagicNumber() != magic) // если ордер не с этой пары, на которой стоит наш эксперт
        continue; // пропускаем его и смотрим на следующий за ним ордер
        

      //_______закрытие Buy_______       
        if (OrderType() == OP_BUY && OrderProfit()>=Profit) 
        // если ордер бай 
        {
         OPB=1;
         if(StochasticCAD==0 || StochasticAUD==100 || SARCAD<bidCAD || SARAUD>askAUD)//и рынок близок к развороту
          {
           OrderClose(OrderTicket(),OrderLots(),Bid,slippage,Wheat); // закроем его, если он в профите
           OPB=0;
          }
        }
        else  
        {
      //_______закрытие Sell_______ 
         if(OrderType() == OP_SELL && OrderProfit()>=Profit)// если ордер селл
          {OPS=1;
           if(StochasticCAD==100 || StochasticAUD==0 || SARCAD>askCAD || SARAUD<bidAUD)//и рынок близок к развороту
            {
             OrderClose(OrderTicket(),OrderLots(),Ask,slippage,PaleTurquoise); // закроем его, если он в профите
             OPS=0;
            }
          }
        }
    }
        
//______________выставление ордеров______________________________________________________________________
    
  
    if (SARCAD>askCAD && SARСCAD<bidCAD && SARAUD<bidAUD && SARСAUD>askAUD && OPB<1)//определим условия
     
     {  //_______Buy_______ 

          if(!IsTradeAllowed())
               {
                  Alert("занят торговый поток, повторим попытку бай...");
                  return(-1);
               }
          OPB =OrderSend("GBPUSD",OP_BUY,volume,Ask,slippage,0,0,comB,magic,0,Red); //выставим ордер
            
            if(OPB == -1)
              {
                 Alert("GBPUSD"," ошибка: бай", GetLastError());
                 return(-1);
              }
         
            if(OPB > 1)
            Alert ("GBPUSD","Выставили ордер на покупку!");

     }
      else
     {//_______Sell_______
  
         if (SARСCAD>askCAD && SARCAD<bidCAD && SARСAUD<bidAUD && SARAUD>askAUD && OPS<1)//определим условия
     
         {
          
           if(!IsTradeAllowed())
                {
                   Alert("занят торговый поток, повторим попытку селл...");
                   return(-1);
                }
        
           OPS=OrderSend("GBPUSD",OP_SELL,volume,Bid,slippage,0,0,comS,magic,0,Blue); //выставим ордер


             if(OPS == -1)
               {
                  Alert("GBPUSD"," ошибка: селл", GetLastError());
                  return(-1);
               }
         
             if(OPS > 1)
             Alert ("GBPUSD","Выставили ордер на продажу!");

         }
     }    
   return(0);//выход
  }

 
ViktorF:


Un test sur tous les tics ? Problèmes d'histoire
 
Vinin:

Un test sur tous les tics ? Problèmes d'histoire

Doit-on recharger l'historique pour toutes les paires impliquées dans l'analyse ?
 
ViktorF:

C'est-à-dire que vous devez recharger l'historique pour toutes les paires impliquées dans l'analyse ?


Peut-être. Si bien sûr la société de courtage le supporte.

Mais il ne faut pas oublier que vous pouvez ouvrir des positions dans le testeur pour le symbole actuel, et qu'il existe certaines restrictions pour les autres symboles

 
Vinin:


C'est possible. Si bien sûr la société de courtage le supporte.

Gardez à l'esprit que dans le testeur, vous ne pouvez ouvrir des positions que sur l'instrument en cours, et qu'il existe certaines restrictions pour les autres instruments.


Qu'est-ce qu'un DC ? Et quelles sont les restrictions sur les autres instruments ?
 
ViktorF:

Qu'est-ce qu'une société de courtage ? Et quelles sont les limites des autres symboles ?


DC - Dealing Desk

Dans le testeur pour les autres instruments, vous ne pouvez obtenir que le prix d'ouverture sur la barre zéro, les ticks pour les autres instruments ne sont pas modélisés, l'environnement de marché est pratiquement indisponible.

Les transactions sur d'autres instruments ne sont pas ouvertes.

Si vous devez effectuer correctement une analyse multidevises, il est préférable d'utiliser MT5. Il existe un testeur multi-devises.

Raison: