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

 
Figar0 >> :

>> Gib den ganzen Code raus, hier riecht es noch nicht nach Stöpseln...

Es geht nicht um Stopper, sondern darum, eine Position zu schließen, sobald der Kurs den MA berührt.

 
Novice писал(а) >>

Es geht nicht um Stoplots, sondern darum, die Position zu schließen, sobald der Kurs den MA berührt.

Sei es drum, du hast über die Haltestellen geschrieben...) Aber ich kann nicht verstehen, warum es ohne den Code nicht funktioniert. Der obige Artikel ist nicht sehr informativ.

 
Figar0 >> :

So sei es, Sie waren es, der über Stöpsel schrieb...). Trotzdem ist es ohne den Code unmöglich zu verstehen, warum es nicht funktioniert, der gepostete Beitrag ist völlig uninformativ.

Ich muss mich sehr falsch ausgedrückt haben, ich entschuldige mich, ich meinte, dass MA selbst als Stop-Loss dienen sollte.

>> :

... ... die Position wurde geschlossen, sobald der Kurs den MA berührte


Und der Code ist äußerst primitiv:


         Ticket=OrderTicket();                 
         Tip   =OrderType();                   
         Lot   =OrderLots();                   

    MA2C=iMA(NULL,0, Period_MA2,0,MODE_SMA,PRICE_CLOSE,0); //Есть две MA с разным периодом.
    MA3C=iMA(NULL,0, Period_MA3,0,MODE_SMA,PRICE_CLOSE,0); //И вот с такими параметрами.
     
     //Так же есть условия, при которых по идее должны срабатывать 
     // функции закрытия ордеров.
     
     RefreshRates();                  
    if ( Tip==0 && Bid== MA2C)        //Обозначение типа ордера и условия закрытия
     {
      CloseBuy=true;                              // Закрыть Buy
     }
     RefreshRates();
    if ( Tip==0 && Bid== MA3C)
     {
      CloseBuy=true;                              // Закрыть Buy
     }
     RefreshRates();
    if ( Tip==1 && Ask== MA2C)
     {
      CloseSell=true;                               // Закрыть Sell
     }
     RefreshRates();
    if ( Tip==1 && Ask== MA3C)
     {
      CloseSell=true;                               // Закрыть Sell
     }

        // Закрытие ордеров
   while(true)                                  // Цикл закрытия орд.
     {
      if ( Tip==0 && CloseBuy==true)                // Открыт ордер Buy..
        {                                       //и есть критерий закр
         Alert("Попытка закрыть Buy ", Ticket,". Ожидание ответа..");
         RefreshRates();                        // Обновление данных
         ALERT=OrderClose( Ticket, Lot,Bid,3,Blue);      // Закрытие Buy
         if ( ALERT==true)                         // Получилось :)
           {
            Alert ("Закрыт ордер Buy ", Ticket);
            break;                              // Выход из цикла закр
           }
         if ( Fun_Error(GetLastError())==1)      // Обработка ошибок
            continue;                           // Повторная попытка
         return;                                // Выход из start()
        }
        if ( Tip==1 && CloseSell==true)                // Открыт ордер Sell..
        {                                       // и есть критерий закр
         Alert("Попытка закрыть Sell ", Ticket,". Ожидание ответа..");
         RefreshRates();                        // Обновление данных
         ALERT=OrderClose( Ticket, Lot,Ask,3,Red);      // Закрытие Sell
         if ( ALERT==true)                         // Получилось :)
           {
            Alert ("Закрыт ордер Sell ", Ticket);
            break;                              // Выход из цикла закр
           }
         if ( Fun_Error(GetLastError())==1)      // Обработка ошибок
            continue;                           // Повторная попытка
         return;                                // Выход из start()
        }
      break;                                    // Выход из while
     }

Ich denke schon, dass 4 Bedingungen in 2 geändert werden können


     RefreshRates();
    if ( Tip==0 && Bid== MA2C || Tip==0 && Bid== MA3C)
     {
      CloseBuy=true;                              // Критерий закр. Buy
     }
     RefreshRates();
    if ( Tip==1 && Ask== MA2C || Tip==1 && Ask== MA3C)
     {
      CloseSell=true;                               // Критерий закр. Sell
     }
 
     RefreshRates();
    if ( Tip==0 && (Bid== MA2C  || Bid== MA3C))
     {
      CloseBuy=true;                              // Критерий закр. Buy
     }
     RefreshRates();
    if ( Tip==1 && (Ask== MA2C ||  Ask== MA3C))
     {
      CloseSell=true;                               // Критерий закр. Sell
     }

Dann ist es so) Wie auch immer, es ist ein wahnhaftes Stück, die Wagen werden zu Angebotspreisen gebaut, und sie so zu vergleichen... Ich weiß es nicht.

Etwas in Ihrem Code, OrderSelect nicht sehen?

 

Das ist Standard, aus einem Lehrbuch:


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

//И далее как выше...
Es ist wichtig für mich zu verstehen, ob dies prinzipiell möglich ist, denn wenn ich im Visualisierungsmodus getestet habe, werden die Aufträge nicht auf MA
 
Novice писал(а) >>

Ich möchte wissen, ob es möglich ist, dies im Prinzip zu tun, weil während der Prüfung im Visualisierungsmodus, die Aufträge nicht auf MA geschlossen werden

Im Prinzip ist das möglich. Haben Sie nur einen einzigen Auftrag in Ihrem System möglich?

Versuchen Sie, Bid/Ask-Preise und MA-Werte auf Gleichheit zu normalisieren, das ist notwendig...

Warum verwenden Sie nicht Ihren Expert Advisor? Ich hätte es schon längst korrigiert.

 
Figar0 >> :

Im Prinzip ist das möglich. Haben Sie nur einen einzigen Auftrag in Ihrem System möglich?

Versuchen Sie, Bid/Ask-Preise und MA-Werte auf Gleichheit zu normalisieren, das ist notwendig...

Warum verwenden Sie nicht Ihren Expert Advisor? Ich hätte es schon längst korrigiert.

Danach begann sich mein Kopf zu drehen...

Nein) Zu einem Gral wie zu anderen Galaxien, nur Versuche, TC zu realisieren und zu verbessern.


Ich konnte nicht den gesamten Code in den Beitrag einfügen, daher hänge ich ihn an

Dateien:
g.ei.vn.gl..mq4  12 kb
 
Novice писал(а) >>

Danach begann sich mein Kopf zu drehen...

Nein) Der Gral ist wie eine andere Galaxie, nur ein Versuch, TC zu implementieren und zu verbessern.

Ich habe es nicht geschafft, den gesamten Code in diesen Beitrag einzufügen, daher füge ich ihn hier ein.

Aber im Prinzip funktioniert es irgendwie:

Das Einzige, was ich entfernt habe, ist die Erhöhung der Menge. Ich dachte, Sie hätten gesagt, dass die Aufträge nicht abgeschlossen sind?

 
Sie schließen nicht auf MA, genau dann, wenn der Preis sie berührt. Auf MA2C und MA3C. Zu den Ausschweifungen: Ja, ich habe sie noch nicht beendet.


Und wie...?

Figar0 >> :

...normalisieren Sie die Geld-/Briefkurse und MA-Werte beim Vergleich auf Gleichheit...

Ich verstehe nur nicht ganz, wie man das normalisieren kann... NormalizeDouble(Frage, Ziffern) ?

 

Das Problem ist aktuell, ich frage mich immer noch, wie man Aufträge zum Schließen bringt, sobald der MA-Kurs erreicht ist.


Nach der Normalisierung trat beim Kompilieren aus irgendeinem Grund ein Fehler auf, und zwar in dem Teil des Codes, der überhaupt nicht berührt wurde.