[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 964

 
volshebnik:
Perché la velocità del tester diminuisce verso la fine del terzo anno?


c'è un tale problema - anch'io ho avuto questo problema, se l'Expert Advisor fa molti scambi all'anno - forse vengono memorizzati molti dati per visualizzare il risultato finale o forse i buffer degli indicatori mangiano memoria

come una sega intera - non so, abbiate pazienza - per il quadro generale, il test per 10 anni, ed è meglio ottimizzare un anno alla volta e poi fare una selezione dei parametri ottimali

 

Voglio analizzare diversi cross seguiti da ordini su un'altra coppia:

int magic = 428;//numero di magia dell'Expert Advisor
extern double volume = 0.1;//volume dell'ordine in corso
extern int slippage = 3;//slippage
int OPB;//il marchio dell'ordine di acquisto
int OPS;//la marcatura dell'ordine di vendita
int Profit=1;//livello di profitto dell'ordine aperto
stringa comB = "Entrata nel trend su Buy; // commento dell'ordine
stringa comS = "Entrata per tendenza a vendere";// commento dell'ordine
double StochasticCAD;//posizione della linea stocastica principale sulla barra corrente su USDCAD
double StochasticAUD;//posizione della linea stocastica principale sulla barra corrente per AUDUSD

double SARCAD;//la posizione attuale dell'indicatore su USDCAD
doppio SARCAD;//posizione della barra dell'indicatore indietro su USDCAD
double SARAUD;//posizione attuale dell'indicatore su AUDUSD
double SARСAUD;//posizione della barra dell'indicatore indietro su 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++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)
break;// se il numero d'ordine i non esiste, ferma la ricerca

if (OrderSymbol() != "GBPUSD" || OrderMagicNumber() != magic) // se l'ordine non è della coppia dove si trova il nostro EA
continue; // salta l'ordine e guarda il prossimo ordine che lo segue


//_______close Acquista_______
if (OrderType() == OP_BUY && OrderProfit()>=Profit)
// se l'ordine è Buy
{
OPB=1;
if(StochasticCAD==0 || StochasticAUD==100 || SARCAD<bidCAD || SARAUD>askAUD)//e il mercato sta per invertire
{
OrderClose(OrderTicket(),OrderLots(),Bid,slippage,Wheat); // chiudilo se è in profitto
OPB=0;
}
}
else
{
//_______close Vendere_______
if(OrderType() == OP_SELL && OrderProfit()>=Profit)// se l'ordine è Sell
{OPS=1;
if(StochasticCAD==100 || StochasticAUD==0 || SARCAD>askCAD || SARAUD<bidAUD)//e il mercato è vicino all'inversione
{
OrderClose(OrderTicket(),OrderLots(),Ask,slippage,PaleTurquoise); // chiudilo se è in profitto
OPS=0;
}
}
}
}

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


if (SARCAD>askCAD && SARCAD<bidCAD && SARAUD<bidAUD && SARCAUD>askAUD && OPB<1)//definire le condizioni

{ //_______Buy_______

se(!IsTradeAllowed())
{
Alert("trade thread is busy, try again buy...");
ritorno(-1);
}
OPB =OrderSend("GBPUSD",OP_BUY,volume,Ask,slippage,0,0,comB,magic,0,Red); //imposta un ordine

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

se(OPB > 1)
Alert("GBPUSD", "Abbiamo un ordine di acquisto!)

}
else
{//_______Sell_______

if(SARCAD>askCAD && SARCAD<bidCAD && SARCADAUD<bidAUD && SARAUD>askAUD && OPS<1)//definire le condizioni

{

se(!IsTradeAllowed())
{
Alert("il thread commerciale è occupato, riprova a vendere...");
ritorno(-1);
}

OPS=OrderSend("GBPUSD",OP_SELL,volume,Bid,slippage,0,0,comS,magic,0,Blue); //imposta un ordine


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

se(OPS > 1)
Avviso("GBPUSD", "Mettere ordine di vendita!)

}
}
return(0);//exit
}


Non esce niente quando lo provo. Nessun risultato.

Nel registro c'è una serie di errori:

Puoi dirmi cosa c'è che non va?

 
ViktorF:

Voglio analizzare diversi cross e poi piazzare ordini su un'altra coppia:

int magic = 428;//numero magico dell'Expert Advisor
extern double volume = 0.1;//volume dell'ordine piazzato
extern int slippage = 3;//slippage
int OPB;//tag dell'ordine di acquisto piazzato
int OPS;//tag dell'ordine di vendita piazzato
int Profit=1;//livello di profitto degli ordini aperti
string comB = "Entry by trend to Buy"; //richiesta di ordine
string comS = "Entry by trend to Sell"; //richiesta di ordine
double StochasticCAD;//posizione della linea principale stocastica sulla barra corrente in USDCAD
double StochasticAUD;//posizione della linea principale stocastica sulla barra corrente in AUDUSD

double SARCAD;//posizione corrente dell'indicatore su USDCAD
double SARCAD;//posizione della barra dell'indicatore su USDCAD
double SARAUD;//posizione corrente dell'indicatore su AUDUSD
double SARAUD;//posizione della barra dell'indicatore su AUDUSD


int start()
{



//______________________________ determinazione dei valori delle variabili_______________________


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);




//______________________________ ricerca e chiusura ordini_______________________________________


int i;
for(i=0; i<=OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)
break;// se l'ordine numero i non esiste, ferma la ricerca

if (OrderSymbol() !="GBPUSD" || OrderMagicNumber() != magic) // se l'ordine non proviene dalla coppia in cui si trova il nostro Expert Advisor
continue; // saltalo e guarda l'ordine che lo segue


//_______close Buy_______
if (OrderType() == OP_BUY && OrderProfit()>=Profit)
// se l'ordine è BUY
{
OPB=1;
if(StochasticCAD==0 || StochasticAUD==100 || SARCAD<bidCAD || SARAUD>askAUD)//e il mercato è vicino all'inversione
{
OrderClose(OrderTicket(),OrderLots(),Bid,slippage,Wheat); // chiudilo se è BUY
OPB=0;
}
}
else
{
//_______close Sell_______
if(OrderType() == OP_SELL && OrderProfit()>=Profit)// se l'ordine è Sell
{OPS=1;
if(StochasticCAD==100 || StochasticAUD==0 || SARCAD>askCAD || SARAUD<bidAUD)//e il mercato è vicino a un'inversione
{
OrderClose(OrderTicket(),OrderLots(),Ask,slippage,PaleTurquoise); // chiudilo se in profitto
OPS=0;
}
}
}
}

//______________ immissione dell'ordine ______________________________________________________________________


if (SARCAD>askCAD && SARCAD<bidCAD && SARAUD<bidAUD && SARAUD>askAUD && OPB<1)// definire condizioni

{ //_______Buy_______

if(!IsTradeAllowed()
{
Alert("il thread commerciale è occupato, riprova a comprare...");
return(-1);
}
OPB =OrderSend("GBPUSD",OP_BUY,volume,Ask,slippage,0,0,comB,magic,0,Red); //imposta ordine

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)//definire condizioni

{

if(!IsTradeAllowed())
{
Alert("il thread commerciale è occupato, riprova a vendere...");
return(-1);
}

OPS=OrderSend("GBPUSD",OP_SELL,volume,Bid,slippage,0,0,comS,magic,0,Blue); //imposta ordine


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

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

}
}
return(0);//exit
}


Non viene fuori niente quando viene testato. Non produce alcun risultato.

C'è una serie di errori nel registro:

Puoi dirmi cosa c'è che non va?


Prima di tutto, imparate a inserire il codice nella finestra premendo simultaneamente "Counterclick + Alt + M", in modo che nella vostra halimatry la gente navighi e dia raccomandazioni.

Prova anche a fare doppio clic sul messaggio di errore corrispondente nel log - forse ti porterà a qualche pensiero...

 
Roman.:


Per prima cosa, imparate a inserire il codice in una finestra premendo contemporaneamente i tasti "Conrle + Alt + M", in modo da poter guidare le persone attraverso le vostre sciocchezze e fare raccomandazioni.

Inoltre, prova a fare doppio clic sul messaggio di errore corrispondente nel registro - forse questo ti darà qualche idea...


Gli errori sono nel log del tester, non in quello del compilatore... (si può effettivamente vedere nella foto se la si guarda prima e la si commenta dopo...). Il doppio clic non fa nulla lì...

 
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 su tutti i tic? Problemi con la storia
 
Vinin:

Un test su tutti i tic? Problemi con la storia

Cioè è necessario ricaricare la cronologia per tutte le coppie coinvolte nell'analisi?
 
ViktorF:

Cioè, è necessario ricaricare la cronologia per tutte le coppie coinvolte nell'analisi?


Forse. Se ovviamente la società di intermediazione lo supporta.

Ma non dobbiamo dimenticare che è possibile aprire posizioni nel tester per il simbolo corrente, e ci sono alcune restrizioni per altri simboli

 
Vinin:


È possibile. Se ovviamente la società di intermediazione lo supporta.

Basta tenere a mente che nel tester è possibile aprire posizioni nello strumento corrente, e ci sono alcune restrizioni su altri strumenti


Cos'è un DC? E quali sono le restrizioni sugli altri strumenti?
 
ViktorF:

Cos'è una società di intermediazione? E quali sono le limitazioni di altri simboli?


DC - Dealing Desk

Nel tester per altri strumenti è possibile ottenere solo il prezzo di apertura sulla barra zero, i tick per altri strumenti non sono modellati, l'ambiente di mercato non è praticamente disponibile.

Le negoziazioni in altri strumenti non vengono aperte.

Se hai bisogno di eseguire correttamente l'analisi multivaluta, è meglio usare MT5. C'è un tester multivaluta.