[ARCHIV]Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht daran vorbei. Ohne dich kann ich nirgendwo hingehen - 5. - Seite 367

 
lottamer:


Dieser Modifikator wurde nicht von mir geschrieben.

Ich habe es in den Bibliotheken vorbereitet.

Deshalb kann ich es auch nicht reinigen. Die Hauptsache ist, dass es zu 100% funktioniert.

Aber warum ist der Parameter darin nicht optimiert - das ist die Frage.....

Es gibt keine grundlegenden Fehler!

Der Rest des Codes funktioniert.

Legen Sie beliebige Bedingungen für den Algorithmus fest.

- kaufen

-Änderung

- schließen

---------------------------

und versuchen Sie, den Parameter innerhalb der Auftragsänderung zu optimieren - d.h. Stopp und Take

Nun, solange es funktioniert, und erst recht, wenn es zu 100 % funktioniert, gibt es kein Problem damit. Warum sollten wir darin nach Fehlern suchen? - Das heißt, es ist nicht das Problem! - Und wenn Sie nach einem Fehler suchen, bedeutet das, dass Sie sich nicht 100%ig sicher sind. Das Problem liegt also nicht im Code, sondern in Ihren Bewertungskriterien, denn die verwirren auch Sie. (Du hast damit angefangen : ))) Ich gieße nur Öl nach...)

Was hier präsentiert wird - ich weiß nicht einmal, wie man es nennen soll ... Wahrscheinlich - eine einzelne Aktion, die auf die Größe einer Funktion aufgebläht ist. In den meisten Programmen ist diese Art der Anwendung nicht optimal - Änderungen in einem Block gehen mit etwas anderem einher. - Allerdings kann es unterschiedliche Bedingungen für die Anwendung geben. Aber ich will damit sagen, dass es hier nichts zu optimieren gibt... Denn es handelt sich nur um eine Maßnahme.

 
lottamer:

Sehen Sie,

Wenn ich jetzt alles zurücknehme, d.h. die externen Parameter STOP und TAKE entferne und stattdessen Zahlen in die Funktion schreibe, dann läuft der EA seit 10 Wochen Woche für Woche und zeigt klare Ergebnisse.

Und wenn ich die Start- und Stopp-Parameter manuell ändere, funktioniert alles und liefert leicht unterschiedliche Ergebnisse (natürlich).

Und warum hält der Optimierer diese Parameter für unbedeutend, wenn ich sie außerhalb des Modifikators nehme?

Das ist genau das, was ich Ihnen zu sagen versuche - dass das Problem höchstwahrscheinlich woanders liegt, nicht in dieser Funktion. Sie haben also etwas anderes durcheinander gebracht. Vielleicht werden diese SL und TP an anderen Stellen angewendet, die sich irgendwie überschneiden, oder etwas anderes. Wir können nur raten. - Deshalb muss man sich den gesamten Code ansehen. Und niemand kann Ihnen blindlings helfen. - Hier gibt es keine Zauberer.

Sie sehen, Sie stellen Fragen, aber Sie geben nicht alle Informationen, die Sie brauchen, um den Grund herauszufinden (Sie verbergen Ihr Wissen auf vernünftige Weise). - Wie in dem Beispiel mit dem Stecker. - Aber wie können Sie in diesem Fall helfen? - Die Antwort ist, dass das nicht möglich ist. Die ganze Hilfe wäre sinnlos. Und es kostet auch eine Menge Energie.

 
Chiripaha:

Nun, wenn es funktioniert, und erst recht, wenn es zu 100 % funktioniert, dann gibt es kein Problem damit. Warum also sollten Sie darin nach einem Fehler suchen? - Das Problem liegt also nicht darin! - Wenn Sie nach einem Fehler suchen, bedeutet dies, dass Sie sich nicht 100%ig sicher sind. Das Problem liegt also nicht im Code, sondern in Ihren Bewertungskriterien, denn die verwirren auch Sie. (Du hast damit angefangen : ))) Ich gieße nur Öl nach...)

Was hier präsentiert wird - ich weiß nicht einmal, wie man es nennen soll ... Wahrscheinlich - eine einzelne Aktion, die auf die Größe einer Funktion aufgebläht ist. In den meisten Programmen ist diese Art der Anwendung nicht optimal - Änderungen in einem Block gehen mit etwas anderem einher. - Allerdings kann es unterschiedliche Bedingungen für die Anwendung geben. Aber ich will damit sagen, dass es hier nichts zu optimieren gibt... Denn es handelt sich nur um eine Maßnahme.

Ich schaue dort hinein, weil wir es NUR geändert haben und weil sich dort die optimierbaren Parameter befinden.

Wie kann es sein, dass es nichts zu optimieren gibt? Stopp- und Takegrößen sind optimiert!

 
Chiripaha:

Das ist genau das, was ich Ihnen zu sagen versuche - dass das Problem wahrscheinlich woanders liegt, nicht in dieser Funktion. Sie haben also etwas anderes verwechselt. Vielleicht werden diese SLs und TPs an anderen Stellen angewendet, die sich irgendwie überschneiden, oder etwas anderes... Wir können nur raten. - Deshalb muss man sich den gesamten Code ansehen. Und niemand kann Ihnen blindlings helfen. - Es gibt keine Zauberer.

Sie stellen nämlich Fragen und lassen einige der Informationen weg, die für die Ermittlung der Ursache erforderlich sind (wobei Sie Ihr Know-how sinnvollerweise verbergen). - Wie in dem Beispiel mit den Einlagen. - Aber wie können Sie in diesem Fall helfen? - Die Antwort ist, dass das nicht möglich ist. Die ganze Hilfe ist sinnlos. Und es kostet auch eine Menge Energie.

Ich verstehe...

wir müssen eine Pause einlegen... und nachdenken...

siehe....

und ich glaube, ich weiß, wo...

 
lottamer:

Ich schaue dort hinein, weil wir es NUR geändert haben und weil sich dort die optimierbaren Parameter befinden.

Wie kann es sein, dass es nichts zu optimieren gibt? Stopp- und Takegrößen sind optimiert!

: )))))) Wofür sind sie optimiert? für die Änderung des Auftrags? - Das ist nicht das, was Sie gerade gesagt haben.

Sie sollten in Bezug auf das Programm, seine Bedingungen - die Sie zuverlässig verstecken - optimiert werden. Sie kann jedoch nicht in Bezug auf eine einzelne Maßnahme optimiert werden.

In diesem Fall muss der Entwickler diese Punkte einfach selbst entscheiden. Wir machen das alle durch, glauben Sie mir. : )) Das tun ich und andere Kollegen auch. Sie können nicht um Hilfe bitten und sich dann verstecken. Dann müssen Sie Ihre Karten offenlegen - in diesem Fall überhaupt öffentlich machen, denn das Forum ist öffentlich -.
 
Chiripaha:

: )))))) In welcher Weise werden sie optimiert? In welcher Reihenfolge? - Das ist nicht das, was Sie gerade gesagt haben.

Sie sollten in Bezug auf das Programm, seine Bedingungen - die Sie zuverlässig verstecken - optimiert werden. Aber man kann sie nicht in Bezug auf eine einzelne Aktion optimieren.

In diesem Fall muss der Entwickler diese Punkte einfach selbst entscheiden. Wir machen das alle durch, glauben Sie mir. : )) Das tun ich und andere Kollegen auch. Man kann nicht um Hilfe bitten und sie dann verstecken. Dann müssen Sie Ihre Karten offenlegen - in diesem Fall überhaupt öffentlich machen, denn das Forum ist öffentlich -.

Ich werde nun den gesamten Code vorbereiten und........ zeigen.
 

Hier ist der Code:

EURUSD-Paar

//+------------------------------------------------------------------+
//|                                                           33.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
#include <WinUser32.mqh>
#include <b-Positions.mqh>

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+

extern  int  STOP = 100; 
extern  int  TAKE = 200;

double  Ma_1, Ma_2,  m2, m3; // m2 и m3 - это маркеры



//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  
Ma_1=iMA(NULL,PERIOD_M15,20, 0,MODE_SMA,PRICE_CLOSE,1) ;

Ma_2=iMA(NULL,PERIOD_M15,100,0,MODE_SMA,PRICE_CLOSE,1) ;





//=============================BUY_CONDITIONS=============================================
    

if (Ma_1>Ma_2 && m2==0)     {My_close();  My_buy ();  My_modify();  m2=1;   }  // закрыть если висят открытые позы   
                                                                                                   // и открыть новую
//=============================SELL_CONDITIONS=============================================
 
if (Ma_1<Ma_2 && m3==0)     {My_close();  My_sell ();  My_modify();  m3=1;  }    
 
//======================================

if  ( OrdersTotal()==0 && (m2==1 || m3==1)) {m2=0; m3=0;}  // обнуляет маркеры при закрытии позиций,
                                                           // что дает возможность открывать снова
//==============переход в безубыток ========================
   
OrderSelect(0,SELECT_BY_POS,MODE_TRADES);
   
if  (OrderProfit()>0.5)  {My_modify_close_zero ();}


return(0);
  }

//============================функция  ПРОДАТЬ==============================================

int My_sell()
{
    OrderSend (Symbol( ), OP_SELL,  0.01 ,Bid, 0, 0, 0, NULL, 0, 0, CLR_NONE);

}
return;

///==================================КУПИТЬ==========================================
int My_buy ()
{
     OrderSend (Symbol( ), OP_BUY, 0.01 ,Ask, 0, 0, 0, NULL, 0, 0, CLR_NONE);
}
return;


//+---------------------МОДИФИЦИРОВАТЬ сделку сразу по открытии---------------------------------------------+


int My_modify()
 {
   bool   result;
   double take_profit,stop_loss,point;
   int    cmd,total,error;
//----
   total=OrdersTotal();
   point=MarketInfo(Symbol(),MODE_POINT);
//----
//   for(int i=0; i<total; i++)
//     {
      if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES))
        {
         //---- print selected order
         OrderPrint();
         cmd=OrderType();
         //---- buy or sell orders are considered
         if(cmd==OP_BUY || cmd==OP_SELL)
           {
            //---- modify first market order
            while(true)
              {
               if(cmd==OP_BUY) stop_loss=OrderOpenPrice()-STOP*point;
               else            stop_loss=OrderOpenPrice()+STOP*point;
               
                if(cmd==OP_BUY) take_profit=OrderOpenPrice()+TAKE*point;
                           else take_profit=OrderOpenPrice()-TAKE*point;
               
               
               result=OrderModify(OrderTicket(),0,stop_loss, take_profit,0,CLR_NONE);
               if(result!=TRUE) { error=GetLastError(); Print("LastError = ",error); }
               else error=0;
               if(error==135) RefreshRates();
               else break;
              }
             //---- print modified order (it still selected after modify)
             OrderPrint();
//            break;
           }
        }
      else { Print( "Error when order select ", GetLastError()); }
//     }

   return(0);
  }
  
  
//==============================выставить стопы в безубыток============================================================
int My_modify_close_zero ()
{
   bool   result;
   double stop_loss,point;
   int    cmd,total,error;
//----
   total=OrdersTotal();
   point=MarketInfo(Symbol(),MODE_POINT);
//----
//   for(int i=0; i<total; i++)
//     {
      if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES))
        {
         //---- print selected order
         OrderPrint();
         cmd=OrderType();
         
         //---- buy or sell orders are considered
         if(cmd==OP_BUY || cmd==OP_SELL)
           {
            //---- modify first market order
            while(true)
              {
               if(cmd==OP_BUY) stop_loss=OrderOpenPrice();
               else            stop_loss=OrderOpenPrice();
               
               result=OrderModify(OrderTicket(),OrderOpenPrice(),stop_loss,OrderTakeProfit(),0,CLR_NONE);
               if(result!=TRUE) { error=GetLastError(); Print("LastError = ",error); }
               else error=0;
               if(error==135) RefreshRates();
               else break;
              }
             //---- print modified order (it still selected after modify)
             OrderPrint();
//             break;
           }
        }
      else { Print( "Error when order select ", GetLastError()); }
//     }
//----
   return(0);
  }

  
//=================ЗАКРЫТЬ СДЕЛКУ=======================================================
int My_close()
  {
   bool   result;
   double price;
   int    cmd,error;
//----
   if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES))
     {
      cmd=OrderType();
      //---- first order is buy or sell
      if(cmd==OP_BUY || cmd==OP_SELL)
        {
         while(true)
           {
            if(cmd==OP_BUY) price=Bid;
            else            price=Ask;
            result=OrderClose(OrderTicket(),OrderLots(),price,3,CLR_NONE);
            if(result!=TRUE) { error=GetLastError(); Print("LastError = ",error); }
            else error=0;
            if(error==135) RefreshRates();
            else break;
           }
        }
     }
   else Print( "Error when order select ", GetLastError());
//----
   return(0);
  }
 
lottamer:

Hier ist der Code:

EURUSD-Paar

b-Positions.mqh anhängen - andernfalls können Sie es nicht ausführen - Sie werden nicht sehen, wie es funktioniert.
 
Chiripaha:
b-Positions.mqh anhängen - andernfalls können Sie es nicht ausführen - Sie werden nicht sehen können, dass es funktioniert.

Dateien:
b-positions.mqh  90 kb
 
lottamer:
Ich habe eine Frage - warum brauchen Sie diese Datei als Plug-in, wenn Sie alle notwendigen Funktionen im Expert Advisor selbst haben? Haben Sie vor, etwas anderes zu tun?