Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 801

 

Ich verstehe nicht, wo das Problem liegt?

int start() 

{

bool i;

int ticket;

double Pricem;

datetime Timen; 

string Symb=Symbol();

ticket=OrderSend(Symb,OP_SELL,0.1,Bid,3,Ask+4*Point,Ask-12*Point);

i=OrderSelect(0,SELECT_BY_POS);

while(true)

{

RefreshRates();

Timen=OrderCloseTime();

  if(Timen>0)

   {

     Pricem=OrderClosePrice();

     Alert(Pricem);

     Alert("ордер закрылся");

     Sleep(30000);

 }

 Sleep(10);

 }

return;                              

}


Es sollte eine Abschlussmeldung erscheinen. Der Auftrag wird eröffnet, erreicht die Haltestelle, wird geschlossen und das war's! Wo liegt der Fehler?
 

Ich löse die Aufgabe, alle offenen Charts mit MQL4-Tools zu schließen. Es gibt 3 offene Charts mit verschiedenen Währungspaaren und dies ist der Skriptcode:

   for (int i=1;i<=3;i++) {
      long current=ChartID();
      Print("итерация цикла: ",i,", идентификатор текущего графика ",current);
      bool result=ChartClose(current);
      if(result)Print("окно успешно закрыто");
      else Print("не удалось закрыть окно с идентификатором: ", current);
   }

Wenn ich das Skript ausführe, wird nur einer der drei Charts geschlossen, und hier sind die Ausdrucke aus dem Protokoll:

AUDUSD,H1: итерация цикла: 1, идентификатор текущего графика 130627565403660021
AUDUSD,H1: окно успешно закрыто
AUDUSD,H1: итерация цикла: 2, идентификатор текущего графика 130627565403660021
AUDUSD,H1: окно успешно закрыто
AUDUSD,H1: итерация цикла: 3, идентификатор текущего графика 130627565403660021
AUDUSD,H1: окно успешно закрыто

Das bedeutet, dass nach dem Schließen eines Diagramms das aktuelle Diagramm das andere sein sollte, aber:

1. Nachdem das erste Diagramm geschlossen wurde,gibt die FunktionChartIDden Bezeichner des geschlossenen Diagramms anstelle des aktuellen Diagramms zurück

2. DieFunktion ChartClose() gibt bei 2 und 3 Iterationen true zurück, was bedeutet, dass sie das bereits geschlossene Fenster erfolgreich schließt...

Wer weiß, wo der Fehler liegt und wie man dieses Problem lösen kann?

 
CJIeCaPb:

Ich verstehe nicht, wo das Problem liegt?

Es sollte eine Abschlussmeldung erscheinen. Der Auftrag wird eröffnet, erreicht die Haltestelle, wird geschlossen und das war's! Wo liegt der Fehler?

Ich denke, dass OrderSelect() innerhalb der while-Schleife sein muss, und außerdem wird die Positionsnummer falsch sein, da sie sich nach dem Schließen der Schleife ändert - in diesem Fall ist es besser, nach Ticket auszuwählen
 
tuner:
Ich denke, OrderSelect() sollte innerhalb einer while-Schleife sein, und außerdem wird die Positionsnummer falsch sein, weil sie sich nach dem Schließen ändert - in diesem Fall ist es besser, aus dem Ticket auszuwählen
Hurra, es hat geklappt! Danke!
 
tuner:

Ich löse die Aufgabe, alle offenen Charts mit MQL4-Tools zu schließen. Es gibt 3 offene Charts mit verschiedenen Währungspaaren und dies ist der Skriptcode:

Wenn ich das Skript ausführe, wird nur einer der drei Charts geschlossen, und hier sind die Ausdrucke aus dem Protokoll:

Das bedeutet, dass nach dem Schließen eines Diagramms das aktuelle Diagramm das andere sein sollte, aber:

1. Nachdem das erste Diagramm geschlossen wurde,gibt die FunktionChartIDden Bezeichner des geschlossenen Diagramms anstelle des aktuellen Diagramms zurück

2. DieFunktion ChartClose() gibt bei 2 und 3 Iterationen true zurück, was bedeutet, dass sie das bereits geschlossene Fenster erfolgreich schließt...

Wer weiß, wo der Fehler liegt und wie man dieses Problem lösen kann?

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   long currChart,prevChart=ChartFirst();
   int i=0,limit=100;
   while(i<limit)
     {
      currChart=ChartNext(prevChart);
      if(currChart<0) break;  
      prevChart=currChart;
      ChartClose(currChart);
      i++;
     }
     ChartClose(ChartFirst());
  }
//+------------------------------------------------------------------+
 

pako, manchmal funktioniert es, manchmal nicht, ich weiß nicht, warum... Ich erhalte eine Fehlermeldung:

2014.12.11 17:52:12.456 Zugriffsverletzung gelesen auf 0x09295000 in 'C:\.....................ex4'

Könnte es daran liegen, dass es versucht, das Diagramm zu schließen, auf das das Skript angewandt wird?

PS funktioniert korrekt, wenn das Skript an das erste Diagramm von links angehängt ist. Wenn ich sie jedoch auf ein anderes Diagramm lege, erhalte ich eine Fehlermeldung

 
tuner:

pako, manchmal funktioniert es, manchmal nicht, ich weiß nicht, warum... Ich erhalte eine Fehlermeldung:

2014.12.11 17:52:12.456 Zugriffsverletzung gelesen auf 0x09295000 in 'C:\.....................ex4'

Könnte es daran liegen, dass es versucht, das Diagramm zu schließen, auf das das Skript angewandt wird?

PS funktioniert korrekt, wenn das Skript an das erste Diagramm von links angehängt ist. Wenn ich sie jedoch auf ein anderes Diagramm lege, erhalte ich eine Fehlermeldung

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   long currChart,prevChart=ChartFirst();
   int i=0,limit=100;
   while(i<limit)
     {
      currChart=ChartNext(prevChart);
      if(currChart<0) break; 
      ChartClose(currChart); 
      prevChart=currChart;
      i++;
     }
     ChartClose(ChartFirst());
  }
//+------------------------------------------------------------------+
 

Leute, helft mir hier aus

Das Problem ist die folgende Funktion, um den Auftrag in Nicht-Verlust zu übersetzen, beginnt es falsch zu arbeiten, wenn ich es auf die Yen-Paare gesetzt und lassen alle offenen Aufträge in Nicht-Verlust

ich lasse sie alle in Ordnung, aber bei fünf Ziffern kehrt es auf Null zurück, auch wenn ich es nur auf fünf Ziffern einstelle, aber das Beste ist, dass es funktioniert, wenn ich es auf fünf einstelle

Was ist der Grund für diese Arbeit? Was sollte in diesen Funktionen berücksichtigt werden, damit die korrekte Ausführung erfolgt und nicht davon abhängt, in welchem Fenster ich drei oder fünf Ziffern in die EA-Operation geworfen habe?

Ich danke Ihnen vielmals.

    }

 //==================================================================================================

 // функция перевода ордеров стоп лоса в без убыток по всем открытым ордерам

 //==================================================================================================

 if(_Simbol==false)//если false то по всем ордерам открытым 

 { 

   for(int i=0;i<OrdersTotal();i++)//цикл перебора ордеров

     {

       if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))//будем искать следующие

         {

           if(OrderType()==OP_BUY) //если тип бай

            {

             double  bid=MarketInfo(OrderSymbol(),MODE_BID);//последний известный бид инструмента

             double  point=MarketInfo(OrderSymbol(),MODE_POINT);//чему равен пункт инструмента

             

               if(OrderStopLoss()<OrderOpenPrice())//если стоп лос меньше цены открытия

                {

                  if(bid-Dist_Perivoda*point>OrderOpenPrice())//бид-профит*пункт больше цены открытия

                   {//модифицируем стоп лос

 bool ord_modifik=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+NormalizeDouble(Level_Zahiti*point,Digits),OrderTakeProfit(),0,clrNONE);

              if(!ord_modifik)//если не получилось

              Comment(GetLastError());//номер ошибки в угол

                   }

                   

                }

            }

            if(OrderType()==OP_SELL)//если тип селл

            {

              double ask=MarketInfo(OrderSymbol(),MODE_ASK);//последний известный аск инструмента

              double  point=MarketInfo(OrderSymbol(),MODE_POINT);//чему равен пункт инструмента

              

              if(OrderStopLoss()==0||OrderStopLoss()>OrderOpenPrice())//если стоп лос больше цены открытия или равен нолю

              {

                if(ask+Dist_Perivoda*point<OrderOpenPrice())//аск +профит*пункт меньше цены открытия

                  {//модифицируем стоп лос

  bool ord_modifik=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-NormalizeDouble(Level_Zahiti*point,Digits),OrderTakeProfit(),0,clrNONE);

                  if(!ord_modifik)//если не получилось

                  Comment(GetLastError());//номер ошибки в  угол

                  }

                }

             } 

          }

       }

    }

  

 
pako:

Danke für den Code, ich verstehe das Wesentliche, obwohl ich immer noch manchmal einen Fehler bekomme.

Experimentiert mit Funktionen, die Diagramm-IDs anzeigen. Was ChartFirst() in der Dokumentation bedeutet, ist völlig unklar, man kann es beliebig interpretieren - sei es das erste Chart, das in der Reihenfolge von links geöffnet wurde, oder das erste Chart, das von allen geöffneten Charts (in der Zeit) geöffnet wurde, oder das erste, das jemals im Terminal geöffnet wurde (die Wahrscheinlichkeit, dass es jetzt geöffnet ist, ist fast null, also macht es keinen Sinn, es zu schließen). Ich neige eher zur letzteren Version, denn ich habe noch nie gesehen, dass diese Funktion die ID des Diagramms zurückgibt, das gerade geöffnet ist.

 
tuner:

Danke für den Code, ich verstehe das Wesentliche, obwohl ich immer noch manchmal einen Fehler bekomme.

Experimentiert mit Funktionen, die Diagramm-IDs anzeigen. Was ChartFirst() in der Dokumentation bedeutet , ist völlig unklar, man kann es beliebig interpretieren - es kann das erste Diagramm bedeuten, das in der Reihenfolge von links geöffnet wurde, oder das erste Diagramm, das von allen geöffneten Diagrammen (in der Zeit) geöffnet wurde, oder das erste Diagramm, das jemals im Terminal geöffnet wurde (die Wahrscheinlichkeit, dass es jetzt geöffnet ist, ist fast null, also macht es keinen Sinn, es zu schließen). Ich neige eher zur letzteren Version, denn ich habe noch nie gesehen, dass diese Funktion die ID des Diagramms zurückgibt, das gerade geöffnet ist.

ChartFirst

Gibt die Karten-ID der ersten Karte des Client-Terminals zurück.

Ich verstehe, dass dies das Diagramm ganz links ist.

Grund der Beschwerde: