[ARCHIV] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 3. - Seite 404

 
splxgf:
Besser noch die erste Option, vor dem Versuch, eine Bestellung zu öffnen (OrderSend)
Herzlichen Dank! Alles funktioniert :)
 
kolyango:

Alle diese Bedingungen können nicht sofort nacheinander folgen (kann in einer Stunde oder zwei oder drei sein), daher sollten wir es so machen, dass, sobald der Indikator 1,0000 erreicht, diese Bedingung nicht bei jedem Tick überprüft wird, und warten, bis ein Bar mit Rückgang schließt, und danach diese 2 Bedingungen nicht bei jedem Tick überprüft werden, und warten, bis der Indikator 0,9980 oder gleich erreicht. Sobald alle Bedingungen erfüllt sind, eröffnen wir einen Marktauftrag zum Verkauf von 0,1 Lot mit einem Stop Loss von 400p und einem Take Profit von 400p.

Im Allgemeinen ist das in Ordnung, aber ich würde genau auf die Werte achten, die der Indikator zurückgibt.

bool Val_max=false, Cl_dn=false, Val_min=false; 
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   int
   i, j, total,
   cnt,
   OrderBuy,
   OrderSell,
   Magic,
   Ticket,                                      // Номер ордера
   Total=0,                                     // Количество ордеров в окне
   Tip=-1;                                      // Тип выбран. ордера (B=0,S=1)      
   double
   Open_0,
   ask,
   bid,
   Price,                                       // Цена выбранного ордера
   SL,                                          // SL выбранного ордера
   TP,                                          // TP выбранного ордера
   Lot;                                         // Колич. лотов в выбран.ордере
   Open_0=Open[0];                             // Цена откр. формирующегося бара
   ask=Ask;                                    // Текущая цена покупки
   bid=Bid;                                    // Текущая цена продажи
   string
   Symb;                                        // Название финанс. инструмента
   Symb=Symbol();                               // Название фин.инстр.
double Value_max=1.0000;
double Value_min=0.9980;
double Open_1= Open[1];
double Close_1= Close[1];
//----

//--------------------------------------------------------------- 4 --

double Val=iCustom(NULL, 0, "HMR MULTI Indicator",0,0);   
if (Val >= Value_max) Val_max=true;                  // 
if (Open_1 > Close_1 && Val_max==true) Cl_dn=true;
if (Val <= Value_min && Cl_dn==true) Val_min=true;
if (Val_max==true && Cl_dn==true && Val_min==true)
  {
   for (j = 0; j < OrdersTotal(); j++)
    {
     OrderSelect(j, SELECT_BY_POS, MODE_TRADES);
     if (OrderSymbol() == Symbol())
      {
      if (OrderType() == OP_SELL) return(0);
      }
    }

   OrderSend(Symbol(),OP_SELL,0.1,NormalizeDouble(Bid,Digits),2,Bid+400*Point,Bid-400*Point,"",3,Red);  // Открытие SELL
   Val_max=false; Cl_dn=false; Val_min=false;
  }

//----
   return(0);
  }
 
splxgf:

Im Großen und Ganzen ist es in Ordnung, aber ich würde genau auf die Werte achten, die der Indikator liefert.


Versucht in Echtzeit über Alert den Wert des Indikators, wurde die Nachricht normal angezeigt:

double Val=iCustom(NULL, 0, "HMR MULTI Indicator",0,0);   
if (Val >= Value_max)
{
Alert("Значение индикатора >= 1.0000");
}
Wenn der Wert 1,0000 erreichte , wurde bei jedem Tick die folgende Meldung angezeigt: " Indikatorwert >= 1,0000".
 
kolyango:


Ich habe versucht, den Echtzeitwert des Indikators über Alert abzurufen, die Meldung wurde normal angezeigt:

Was dem Prüfer nicht gefällt, müssen Sie in das Protokoll eintragen und sich ansehen.
 
splxgf:
Was dem Prüfer nicht gefällt, müssen Sie dann im Logbuch nachsehen und Warnungen hinzufügen.

Ist der Code nun korrekt?
 

Was bedeutet das?

2011.12.06 01:07:55 HMR MULTI-Indikator EURUSD,M15: entfernt

2011.12.06 01:07:57 TestGenerator: Nicht übereinstimmende Datenfehler (Volumengrenze 603 am 2011.12.01 00:00 überschritten)

2011.12.06 01:07:57 2011.12.01 00:00 HMR MULTI Indicator EURUSD,M15: Unbekannte Teilfensternummer -1 für ObjectCreate Funktion


 
kolyango:

Was bedeutet das?

2011.12.06 01:07:55 HMR MULTI-Indikator EURUSD,M15: entfernt

2011.12.06 01:07:57 TestGenerator: Nicht übereinstimmende Datenfehler (Volumengrenze 603 am 2011.12.01 00:00 überschritten)

2011.12.06 01:07:57 2011.12.01 00:00 HMR MULTI Indicator EURUSD,M15: unbekannte Teilfensternummer -1 für ObjectCreate Funktion


Es scheint zwei Fehler zu geben:
1. Wahrscheinlich müssen Sie MT4 vom Internet trennen und dann historische Daten importieren.
2. Sie müssen den Code überprüfen.

 
chief2000:
Hier scheint es zwei Fehler zu geben:
1. Möglicherweise müssen Sie MT4 vom Internet trennen und dann historische Daten importieren.
2. Sie müssen den Code überprüfen.

... Indikator.

 int start(){
  double Val=iCustom(NULL, 0, "HMR MULTI Indicator",0,0);   
  Alert(Val);
}

Versuchen Sie die "Bauchgefühl"-Methode mit einem leeren Expert Advisor,

im Indikator überprüfen, dass ObjectCreate sein Unterfenster findet (oder warum es zeichnen, WENN wir es testen ODER OPTIMIEREN)

if(IsTesting()||IsOptimization())флаг_Канады_не_рисовать_obj=true;          //проверяем надо ли рисовать (в ините ему место через статик переменную)
if(!флаг_Канады_не_рисовать_obj){                                           //запрет отрисовки объектов ели оптимизация или тестирование
ObjectCreate(........................);
}
 
granit77:
Das heißt, wenn es keine Parameterübertragung gibt, dann:

Vielen Dank für Ihre Antworten!
 

Guten Tag!

Können Sie mir bitte sagen, wie ich verhindern kann, dass der EA mit dem Parameter "Tool" (_OrderSymbol) Wiederholungen in die Datei schreibt. Ich habe auf dem Forum gesehen, wie Wiederholungen https://forum.mql4.com/ru/5814 in einem Array zu löschen, aber ich habe nicht herausgefunden, wie man es auf meine Situation anwenden. Und bei Wiederholungen werden sogar in einer Schleife 200 identische Zeilen in eine Datei gestanzt.

void TimeStr6() { 
   int i,handle,_ordertype;
   double _openprice,_orderLots,_OrderProfit;
   string _orderspread,_orderbalance,_OrderSymbol,_orderOpenTime,_orderOpenTime1;
   string tekTime=TimeToStr(CurTime(),TIME_DATE)+"_";
   string path=tekTime+"Оптимальный.csv";
//---------------------------
    handle=FileOpen(path,FILE_READ|FILE_WRITE);
    if (handle>0){
       FileWrite(handle,"Дата","Время","Инструмент","Баланс оптимальный"); 
       _orderOpenTime=TimeToStr(OrderOpenTime(),TIME_DATE);
       _orderOpenTime1=TimeToStr(OrderOpenTime(),TIME_SECONDS);
       _OrderSymbol=SymbolMax[nnnn];
       _orderbalance=DoubleToStr(StartBalance,0);
       FileSeek(handle,0,SEEK_END);
       FileWrite(handle,_orderOpenTime,_orderOpenTime1,_OrderSymbol,_orderbalance);
       FileClose(handle);
     }
   return;
}