[WARNUNG GESCHLOSSEN!] Alle Fragen von Neulingen, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen. - Seite 832

 
Vinin:

Was wird sich beim nächsten Mal ändern?
Das ist das Gleiche. Eine Position wird geschlossen - ein schwebender Auftrag wird gesetzt, usw. Es gibt eine Funktion, die den letzten Wert zurückgibt (z. B. OrderCloseTime()). Bei jedem Tick erhalte ich den Zeitwert der zuletzt geschlossenen Position (z. B. Position 1). Wenn ich die nächste Position (Position 2) mit einem neuen Tick schließe, erhalte ich die Zeit zum Schließen dieser Position (Position 2). Der Wert von OrderCloseTime() hat sich gegenüber dem vorherigen Wert geändert. Und so weiter. Es ist mir egal, wie oder wie sehr sich die Variable verändert hat. Für mich ist allein die Tatsache wichtig, dass sich die Variable geändert hat. Es ist wie eine logische Operation: Wenn die OrderCloseTime() der letzten geschlossenen Position größer ist als die OrderCloseTime() der vorletzten Position, dann sollten wir BLA-BLA-BLA machen. Außerdem - wenn der OrderClosePrice() der letzten geschlossenen Position nicht gleich dem OrderClosePrice() der vorletzten Position ist, dann machen Sie einen BLA-BLA-BLA. Oder ist ein solcher Vergleich vielleicht gar nicht möglich?
 
Hier ist die Frage. Angenommen, unser EA zeigt ein Kaufsignal an, wenn der Indikator (z. B. der CCI) ein bestimmtes Niveau (die rote Linie) von unten nach oben überschreitet, und ein Verkaufssignal, wenn er nach unten geht. Wie kann man erreichen, dass der Auftrag nur einmal während der Bildung des Balkens A geöffnet wird? Angenommen, der Indikator kreuzt das Niveau (die rote Linie) während der Bildung von Balken A mehrmals nach unten und oben. Wie ich bereits erwähnt habe, sollten wir dafür sorgen, dass der Auftrag nur einmal geöffnet wird.

Was ich brauche, ist ein Verkaufssignal, das in Takt D (Situation 2 auf dem Diagramm) empfangen wird, um den in Takt A eröffneten Auftrag nicht zu schließen und in keiner Weise beeinflusst zu werden.

D.h., die Aufträge werden nach ihrer Eröffnung nicht vom Expert Advisor kontrolliert.


Ich danke Ihnen im Voraus.

 

Bitte helfen Sie mir, einen Teil des Sequent Demarque Codes an den EA https://www.mql5.com/ru/code/7372 anzuhängen.

funktioniert nicht auf diese Weise:

num=0:

for(i=Balken; i>=0; i--)
{
if ((iClose(NULL,PERIOD_M5,i+1)<iClose(NULL,PERIOD_M5,i+4) && num!=0 )) {
num++;


wenn ((iClose(NULL,PERIOD_M5,i+1)<iClose(NULL,PERIOD_M5,i+4))
kaufen.......

wenn (num==9)
schließen........

 
Vinin:


1. Zählen Sie die Anzahl der Aufträge der ersten Art

2. Zählen Sie die Anzahl der Aufträge vom Typ 2

3. Vergleichen Sie die Ergebnisse


Lieber Vinin. Herzlichen Dank!
 
Forrim:
Hier ist die Frage. Nehmen wir an, dass das Kaufsignal im EA generiert wird, wenn der Indikator (z.B. habe ich CCI genommen) ein bestimmtes Niveau (rote Linie) von unten nach oben kreuzt, während das Verkaufssignal generiert wird, wenn es von oben nach unten geht. Wie kann man erreichen, dass der Auftrag nur einmal während der Bildung des Balkens A geöffnet wird? Angenommen, der Indikator kreuzt das Niveau (die rote Linie) während der Bildung von Balken A mehrmals nach unten und oben. Wie ich bereits erwähnt habe, sollten wir dafür sorgen, dass ein Auftrag nur einmal eröffnet wird.

Dies setzt voraus, dass bei einem Verkaufssignal in Takt D (Situation 2 auf dem Diagramm) der in Takt A eröffnete Auftrag nicht geschlossen und in keiner Weise beeinflusst wird.

Das heißt, die Aufträge werden nicht vom EA kontrolliert, nachdem sie geöffnet wurden.


Vielen Dank im Voraus.

In der Tat springt der CCI so stark, dass wir ihn besser überprüfen sollten, nachdem die Bar geschlossen und eine neue eröffnet wurde.

Wenn wir prüfen wollen, ob die Eröffnungszeit einer Kerze unterschiedlich ist (wenn ja, wird die Order eröffnet) oder gleich ist (=> keine Order wird eröffnet), dann sollten wir bei jedem Übergang die Eröffnungszeit in der globalen Variable speichern.

 
Forrim:
Hier ist die Frage. Angenommen, unser EA zeigt ein Kaufsignal an, wenn der Indikator (z. B. der CCI) ein bestimmtes Niveau (die rote Linie) von unten nach oben überschreitet, und ein Verkaufssignal, wenn er nach unten geht. Wie kann man erreichen, dass der Auftrag nur einmal während der Bildung des Balkens A geöffnet wird? Angenommen, der Indikator kreuzt das Niveau (die rote Linie) während der Bildung von Balken A mehrmals nach unten und oben. Wie ich bereits erwähnt habe, sollten wir dafür sorgen, dass der Auftrag nur einmal geöffnet wird.

Was wir brauchen, ist, dass das Verkaufssignal in Takt D (Situation 2 im Diagramm) empfangen wird, um den in Takt A eröffneten Auftrag nicht zu schließen und in keiner Weise beeinflusst zu werden.

D.h., die Aufträge werden nach ihrer Eröffnung nicht vom Expert Advisor kontrolliert.


Ich danke Ihnen im Voraus.

Wenn eine Position dieser Art bereits geöffnet ist, öffnen Sie keine weitere.
 
//--------------------------------------------------------------- 1 --
                                   // Численные значения для М15
extern double StopLoss   =20;      // SL для открываемого ордера
extern double TakeProfit =20;      // ТР для открываемого ордера
extern double Step_Sar=0.02;       // Шаг Sar
extern double Maximum_Sar=0.2;     // Максимум Sar
extern double Lot=0.01;            // Жестко заданное колич. лотов
bool Work=true;                    // Эксперт будет работать.
//--------------------------------------------------------------- 2 --
int start()
  { 
   int   
   Total,                           // Количество ордеров в окне 

   Ticket;                          // Номер ордера
   
   double
   Sar_1 ,                          // Значен. Sar текущее
   Sar_0 ,                          // Значение Sar предыдущей свечки      
   Price,                           // Цена ордера
   SL,                              // SL ордера 
   TP;                              // TP ордера
   
   bool
   Ans  =false,                     // Ответ сервера после закрытия
   Cls_B=false,                     // Критерий для закрытия  Buy
   Cls_S=false,                     // Критерий для закрытия  Sell
   Opn_B=false,                     // Критерий для открытия  Buy
   Opn_S=false;                     // Критерий для открытия  Sell
   
//--------------------------------------------------------------- 3 --   
   // Учёт ордеров   

   Total=0;                                     // Количество ордеров
   for(int i=1; i<=OrdersTotal(); i++)          // Цикл перебора ордер
     {
      if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
        {                                       // Анализ ордеров:
         if (OrderSymbol()!=Symbol())continue;      // Не наш фин. инструм
         if (OrderType()>1)                     // Попался отложенный
           {
            Alert("Обнаружен отложенный ордер. Эксперт не работает.");
            return;                             // Выход из start()
           }
         Total++;                               // Счётчик рыночн. орд
         if (Total>1)                           // Не более одного орд
           {
            Alert("Несколько рыночных ордеров. Эксперт не работает.");
            return;                             // Выход из start()
           }

   
     
       
        
    
         
         Price =OrderOpenPrice();               // Цена выбранн. орд.
         SL    =OrderStopLoss();                // SL выбранного орд.
         TP    =OrderTakeProfit();              // TP выбранного орд.
         Lot   =OrderLots();                    // Количество лотов
         }
         }
   
//--------------------------------------------------------------- 6 --
   // Торговые критерии
   Sar_1=iSAR(NULL, 0, 0.02, 0.2, 1);           // Sar_1
   Sar_0=iSAR(NULL, 0, 0.02, 0.2, 0);           // Sar_0
 
   if (Sar_0 > Price && Sar_1 < Price)          // если Sar меняет положение
     {
      Opn_B=true;                               // Критерий откр. Buy             
     }  
   if (Sar_0 < Price && Sar_1 > Price)          // если Sar меняет положение
     {                                          
      Opn_S=true;                               // Критерий откр. Sell                                   
     }   
//--------------------------------------------------------------- 7 --
  
     {
      if (Opn_B==true)         
        {                                       // критерий откр. Buy
         RefreshRates();                        // Обновление данных
         SL=(20+Ask-Bid)*Bid;                 // Вычисление SL откр.
         TP=20*Bid;                           // Вычисление TP откр.
         Alert("Попытка открыть Buy. Ожидание ответа..");
         Ticket=OrderSend(Symbol(),OP_BUY,Lot,Ask,0,SL,TP);//Открытие Buy                         
        }
        if (Fun_Error(GetLastError())==1)      // Обработка ошибок
                                   
         return;                                // Выход из start()
        
        
      if (Opn_S==true)                          // критерий откр. Sell
      
        {                                       // критерий откр. Sell
         RefreshRates();                        // Обновление данных
         SL=(20+Ask-Bid)*Ask;                 // Вычисление SL откр.
         TP=20*Ask;                           // Вычисление TP откр.
         Alert("Попытка открыть Sell. Ожидание ответа..");
         Ticket=OrderSend(Symbol(),OP_SELL,Lot,Bid,0,SL,TP);//Открытие Sel
         
         return;                                // Выход из start()
        }
        
      if (Fun_Error(GetLastError())==1)      // Обработка ошибок
                      
         return;                                // Выход из start()
        
     }
//--------------------------------------------------------------- 9 --
   return;                                      // Выход из start()
  }
//-------------------------------------------------------------- 10 --
int Fun_Error(int Error)                        // Ф-ия обработ ошибок
  {
   switch(Error)
     {                                          // Преодолимые ошибки            
      case  4: Alert("Торговый сервер занят. Пробуем ещё раз..");
         Sleep(3000);                           // Простое решение
         return(1);                             // Выход из функции
      case 135:Alert("Цена изменилась. Пробуем ещё раз..");
         RefreshRates();                        // Обновим данные
         return(1);                             // Выход из функции
      case 136:Alert("Нет цен. Ждём новый тик..");
         while(RefreshRates()==false)           // До нового тика
            Sleep(1);                           // Задержка в цикле
         return(1);                             // Выход из функции
      case 137:Alert("Брокер занят. Пробуем ещё раз..");
         Sleep(3000);                           // Простое решение
         return(1);                             // Выход из функции
      case 146:Alert("Подсистема торговли занята. Пробуем ещё..");
         Sleep(500);                            // Простое решение
         return(1);                             // Выход из функции
         // Критические ошибки
      case  2: Alert("Общая ошибка.");
         return(0);                             // Выход из функции
      case  5: Alert("Старая версия терминала.");
         Work=false;                            // Больше не работать
         return(0);                             // Выход из функции
      case 64: Alert("Счет заблокирован.");
         Work=false;                            // Больше не работать
         return(0);                             // Выход из функции
      case 133:Alert("Торговля запрещена.");
         return(0);                             // Выход из функции
      case 134:Alert("Недостаточно денег для совершения операции.");
         return(0);                             // Выход из функции
      default: Alert("Возникла ошибка ",Error); // Другие варианты   
         return(0);                             // Выход из функции
     }
  }
//-------------------------------------------------------------- 11 --

Elementarer EA, sollte eine Position eröffnen, wenn sich der Parabolic SAR Indikator relativ zum Preisdiagramm ändert, funktioniert auf M15, SL und TP sind immer konstant für die eröffnete Position.

Der EA vergleicht die Indikatorpositionen der aktuellen und der vorherigen Kerze.

Es gibt keine Fehler oder Bugs während der Kompilierung, im Test in der Registerkarte "Ergebnisse" "Diagramm" "Bericht" ist leer, im Protokoll ist dies: "Bild".

Ich bin für den zweiten Tag codieren, ich habe noch nie codiert vor, ich las meine mql Bücher und suchte das Internet für mein Problem. Ich stecke in einer Sackgasse, bitte helfen Sie mir, wenn Sie können.


 

T.H.C. Versuchen Sie dies




Dateien:
0000001_1.mq4  3 kb
 
Techno:

T.H.C. Versuchen Sie dies.




Vielen Dank, ich hatte nicht mit einer so schnellen Antwort und einer solchen Änderung des Codes gerechnet.

Bitte empfehlen Sie andere Programmierbücher als Basic Mql

 
T.H.C.:

Vielen Dank, ich habe nicht erwartet, eine solche Geschwindigkeit und Änderungen in den Code.

Bitte empfehlen Sie weitere Bücher über Programmierung, außer Basic Mql.

Ich habe nur das Grundwerk gelesen, man braucht mehr Übung, um das Thema gut zu verstehen.