Un consulente che seguirebbe il tasso su un grafico a cinque minuti con condizioni una volta lanciato: - pagina 6

 

Buona giornata.

Potete consigliarmi: c'è uno script che scrive prontamente la storia nel file, ma quando il file è aperto il record non va.... Lo script che probabilmente conoscete o avete visto si chiama currency_loader

// caricare i dati della storia da M1
void LoadingM1(){//1
int MaxBars=MaxBarsInFile;
if(LoadM1 && iBars(Symbol(),PERIOD_M1)>BarsMin){ArrayCopyRates(ArrayM1,Symbol(),PERIOD_M1); ArrSizeM1=ArrayRange(ArrayM1,0);}
se(ArrSizeM1>1){//2
if(MaxBars>ArrSizeM1){MaxBars=ArrSizeM1;}
for(i2=1; i2<=Tryes; i2++){//3
h1 = FileWrite(FileNameM1,FILE_WRITE|FILE_CSV);
if(h1==-1){LastError=GetLastError();Info("1.2",1"," C'è un errore durante l'apertura del file: "+FileNameM1+" a "+i2+" Prova "+ErrorDescription(LastError));Pause=Pause+Pause; Sleep(Pause); continua; }else{Info("1.2",2", "File "+FileNameM1+" aperto con successo");}
FileWrite(h1,FirstLine);
per (i=MaxBars-1; i>=0; i-- ){//4
if(!USRegionSet){
CString=CString+TimeToStr(ArrayM1[i][0],TIME_DATE)+""; // data della barra
CString=CString+TimeToStr(ArrayM1[i][0],TIME_MINUTES)+","; // tempo della barra
}
else{
BarTime=ArrayM1[i][0];
CString=CString+GetUSFormatTime(BarTime)+" "; // data della barra
BarTime=0;
}
CString=CString+DoubleToStr(ArrayM1[i][1],iDigits)+","; // prezzo aperto
CString=CString+DoubleToStr(ArrayM1[i][3],iDigits)+","; // Prezzo alto
CString=CString+DoubleToStr(ArrayM1[i][2],iDigits)+","; // Prezzo basso
CString=CString+DoubleToStr(ArrayM1[i][4],iDigits)+""; // Prezzo di chiusura
FileWrite(h1,CString);
CString="";
}//4
FileClose(h1);
LCM1 = iTime(Symbol(),PERIOD_M1,0);
ritorno;
}//3
}//2
}//1


Per quanto ho capito c'è un problema nelle maniglie, ma dov'è la domanda...

 
Testato EA, mostra profitto con i seguenti parametri, ecco il codice:
//+------------------------------------------------------------------+
//|                                                Expert-000001.mq4 |
//|                                    Copyright © 2008, salesman*** |
//|                                         http://www.forexgrand.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, salesman***"
#property link      "http://www.forexgrand.ru"
extern double StopLoss=30;                          // Stop Loss
extern double TakeProfit=3;                         // Take Profit
extern double Lots=0.02;                          // Объем сделки в %
extern double Slippage =4;                         // Максимальное отклонение от запрошенной цены
extern double Delta=30;                             // Сигнал приказа в пунктах
extern double MagicNumber ;                   // Order ID
int  ticket;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
{


//----
if (iOpen(NULL,5,0)-Bid>Delta*Point) //Цена упала больше Delta пунктов
{
ticket=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Bid-StopLoss*Point,Ask+TakeProfit*Point,"Купил",MagicNumber,11111,Green);

}
if (iOpen(NULL,5,0)-Bid<Delta*Point) //Цена выросла больше Delta пунктов
{
ticket=OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Ask-StopLoss*Point,Bid+TakeProfit*Point,"Продал",MagicNumber,22222,Green);
}
//----
return(0);
}
//+------------------------------------------------------------------+
Ancora non funziona!!!!
Aiutami a capire qual è la ragione.
 

Allora, come l'hai testato? E come fa a mostrare un profitto se non funziona? E come non funziona? Cosa stampa la rivista? L'hai provato nel tester? O online?

Inoltre, guardate la funzione OrdersTotal, a cosa serve e come viene inserita da....

Per esempio, int total=OrdersTotal(); if(total<1) {

 
int start()
{


//----
if (iOpen(NULL,5,0)-Bid>Delta*Point) //Il prezzo è sceso più di Delta points
{
ticket=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Bid-StopLoss*Point,Ask+TakeProfit*Point, "Bought",MagicNumber,11111,Green);

}
if (iOpen(NULL,5,0)-Bid<Delta*Point) //Il prezzo è salito più di Delta points
{
ticket=OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Ask+StopLoss*Point,Bid-TakeProfit*Point, "Sold",MagicNumber,22222,Green);
}
//----
return(0);
}
//+------------------------------------------------------------------+
E tu sei un tipo insistente, capiscilo. Funziona, ma è semplicemente stupido. Copialo in MetaEditor, o confonderai di nuovo il + con il -.
 


Per quanto ho capito, il problema è da qualche parte nelle maniglie, ma dov'è la domanda...

Ecco un esempio di come ottenere Handle
int hwnd1 = WindowHandle(Symbol(), Period());
Non ho notato nulla di simile nel tuo codice.
Se un file "csv" viene aperto da Excel, è bloccato e il file non ha accesso in scrittura, è un mistero?
 
rid:

Allora, come l'hai testato? E come fa a mostrare un profitto se non funziona? E come non funziona? Cosa stampa la rivista? L'hai provato nel tester? O online?

Inoltre, guardate la funzione OrdersTotal, a cosa serve e come viene inserita da....

Per esempio, int total=OrdersTotal(); if(total<1) {

Testato con un tester, come altro? :)
Mostra profitto 504, numero di scambi 432, drawdown $788, 7,31%. Nelle impostazioni ho messo m5 su sterlina, 17/03/08 - 19/03/08.
E quando l'ho eseguito sul grafico, le mie condizioni per i trade sono state soddisfatte, ma l'Expert Advisor non ha fatto nulla.......
 
zhuki:
int start()
{


//----
if (iOpen(NULL,5,0)-Bid>Delta*Point) //Il prezzo è sceso più di Delta punti
{
ticket=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Bid-StopLoss*Point,Ask+TakeProfit*Point, "Bought",MagicNumber,11111,Green)

}
if (iOpen(NULL,5,0)-Bid<Delta*Point) //Il prezzo è salito più di Delta punti
{
ticket=OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Ask+StopLoss*Point,Bid-TakeProfit*Point, "Sold",MagicNumber,22222,Green);
}
//----
ritorno(0);
}
//+------------------------------------------------------------------+
E tu sei un tipo testardo, capiscilo. Funziona, ma è semplicemente stupido. Copialo in MetaEditor, o confonderai di nuovo il + con il -.
Urgh!!!!!! Grazie mille. Funziona.
 
Quando finisci il tuo GRAAL, almeno condividi l'idea.
 
Mi vergogno a chiederlo :)))
Come posso fare in modo che il mio Expert Advisor apra solo un trade e non ne apra altri finché non finisce?
 
salesman77:
Mi vergogno a chiederlo :)))
Come posso fare in modo che il mio Expert Advisor apra solo un trade, e finché non finisce, non ne apra altri?

Organizza in un ciclo una ricerca di tutte le posizioni aperte e le controlla per il simbolo corrente e il numero magico. Se non se ne trova nessuno, allora accendiamo la luce verde. Il kodobase è pieno di questi esempi, in quasi tutte le EA.