Ein Berater, der den Kurs auf einem Fünf-Minuten-Chart mit Bedingungen nach dem Start verfolgen würde: - Seite 6

 

Guten Tag.

Ich habe ein Skript, das den Verlauf sofort in die Datei schreibt, aber wenn die Datei geöffnet wird, geht der Datensatz nicht.... Das Skript, das Sie wahrscheinlich kennen oder gesehen haben, heißt currency_loader

// Laden von Verlaufsdaten aus M1
void LoadingM1(){//1
int MaxBars=MaxBarsInFile;
if(LoadM1 && iBars(Symbol(),PERIOD_M1)>BarsMin){ArrayCopyRates(ArrayM1,Symbol(),PERIOD_M1); ArrSizeM1=ArrayRange(ArrayM1,0);}
if(ArrSizeM1>1){//2
if(MaxBars>ArrSizeM1){MaxBars=ArrSizeM1;}
for(i2=1; i2<=Tryes; i2++){//3
h1 = FileWrite(DateinameM1,FILE_WRITE|FILE_CSV);
if(h1==-1){LastError=GetLastError();Info("1.2",1"," Beim Öffnen der Datei ist ein Fehler aufgetreten: "+DateinameM1+" bei "+i2+" Versuch "+FehlerBeschreibung(LetzterFehler));Pause=Pause+Pause; Sleep(Pause); continue; }else{Info("1.2",2", "Datei "+DateinameM1+" erfolgreich geöffnet ");}
FileWrite(h1,FirstLine);
for (i=MaxBars-1; i>=0; i-- ){//4
if(!USRegionSet){
CString=CString+TimeToStr(ArrayM1[i][0],TIME_DATE)+""; // Datum des Taktes
CString=CString+TimeToStr(ArrayM1[i][0],TIME_MINUTES)+","; // Uhrzeit des Taktes
}
sonst{
BarTime=ArrayM1[i][0];
CString=CString+GetUSFormatTime(BarTime)+" "; // Datum des Taktes
BarTime=0;
}
CString=CString+DoubleToStr(ArrayM1[i][1],iDigits)+","; // Eröffnungskurs
CString=CString+DoubleToStr(ArrayM1[i][3],iDigits)+","; // Höchstpreis
CString=CString+DoubleToStr(ArrayM1[i][2],iDigits)+","; // Niedriger Preis
CString=CString+DoubleToStr(ArrayM1[i][4],iDigits)+""; // Schlusskurs
FileWrite(h1,CString);
CString="";
}//4
FileClose(h1);
LCM1 = iTime(Symbol(),PERIOD_M1,0);
Rückkehr;
}//3
}//2
}//1


Soweit ich verstanden habe, gibt es ein Problem mit den Griffen, aber wo ist die Frage...

 
Getestet EA, zeigt Gewinn mit den folgenden Parametern, hier ist der Code:
//+------------------------------------------------------------------+
//|                                                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);
}
//+------------------------------------------------------------------+
Funktioniert immer noch nicht!!!!
Helfen Sie mir zu verstehen, was der Grund dafür ist.
 

Wie haben Sie es getestet? Und wie soll es einen Gewinn abwerfen, wenn es nicht funktioniert? Und warum funktioniert es nicht? Was wird in der Zeitschrift gedruckt? Haben Sie es im Prüfgerät getestet? Oder online?

Schauen Sie sich auch die Funktion OrdersTotal an, wofür sie da ist und wie sie von.... eingefügt wird.

Zum Beispiel: int total=OrdersTotal(); if(total<1) {

 
int start()
{


//----
if (iOpen(NULL,5,0)-Bid>Delta*Point) //Der Kurs ist um mehr als Delta-Punkte gefallen
{
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) //Der Kurs ist um mehr als Delta-Punkte gestiegen
{
ticket=OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Ask+StopLoss*Point,Bid-TakeProfit*Point, "Sold",MagicNumber,22222,Green);
}
//----
return(0);
}
//+------------------------------------------------------------------+
Und Sie sind ein aufdringlicher Typ, verstehen Sie? Kopieren Sie es in MetaEditor, sonst verwechseln Sie wieder das + mit dem -.
 


Soweit ich das verstehe, liegt das Problem irgendwo in den Griffen, aber wo ist die Frage...

Hier ist ein Beispiel für den Erhalt von Handle
int hwnd1 = WindowHandle(Symbol(), Period());
Ich habe in Ihrem Code nichts Ähnliches bemerkt.
Wenn eine "csv"-Datei von Excel geöffnet wird, sie gesperrt ist und kein Schreibzugriff möglich ist, ist das ein Rätsel?
 
rid:

Wie haben Sie es getestet? Und wie soll es einen Gewinn abwerfen, wenn es nicht funktioniert? Und warum funktioniert es nicht? Was wird in der Zeitschrift gedruckt? Haben Sie es wo getestet, im Testgerät? Oder online?

Schauen Sie sich auch die Funktion OrdersTotal an, wofür sie gedacht ist und wie sie von.... eingefügt wird.

Zum Beispiel: int total=OrdersTotal(); if(total<1) {

Getestet mit einem Tester, wie sonst? :)
Zeigt Gewinn 504, Anzahl der Trades 432, Drawdown $788, 7.31%. In den Einstellungen habe ich m5 auf Pfund gesetzt, 17/03/08 - 19/03/08.
Und wenn ich es auf dem Chart laufen ließ, wurden meine Bedingungen für den Handel erfüllt, aber der Expert Advisor tat nichts.......
 
zhuki:
int start()
{


//----
if (iOpen(NULL,5,0)-Bid>Delta*Point) //Der Preis ist um mehr als Delta-Punkte gefallen
{
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*Punkt) //Der Preis ist um mehr als Delta-Punkte gestiegen
{
ticket=OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Ask+StopLoss*Point,Bid-TakeProfit*Point, "Sold",MagicNumber,22222,Green);
}
//----
zurück(0);
}
//+------------------------------------------------------------------+
Und Sie sind ein sturer Kerl, verstehen Sie das. Kopieren Sie es in MetaEditor, sonst verwechseln Sie wieder das + mit dem -.
Urgh!!!!!! Ich danke Ihnen vielmals. Es klappt.
 
Wenn Sie Ihr GRAAL fertiggestellt haben, sollten Sie zumindest die Idee mitteilen.
 
Es ist mir peinlich, das zu fragen :)))
Wie kann ich meinen Expert Advisor dazu bringen, nur einen Handel zu eröffnen und keine weiteren zu eröffnen, bis dieser beendet ist?
 
salesman77:
Es ist mir peinlich, das zu fragen :)))
Wie kann ich meinen Expert Advisor dazu bringen, nur einen Handel zu eröffnen, und bis dieser beendet ist, keine weiteren zu eröffnen?

Ordnen Sie in einer Schleife eine Suche nach allen offenen Positionen an und überprüfen Sie diese auf das aktuelle Symbol und die magische Zahl. Wenn keine gefunden werden, schalten wir das grüne Licht ein. Die kodobase ist voll von solchen Beispielen, in fast jedem EA.