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

 

Liebe Forumsspezialisten, die auch früher fast nichts verstanden haben.

Ich versuche, einen einfachen Expert Advisor zu schreiben, der den Parabolic Sar Indikator als Trainingstool verwendet. Seine Aktion soll elementar sein: Wenn der Kurs unter dem Sar-Wert lag und dann anstieg, dann sollten wir genau in dem Moment kaufen, in dem der Kurs den Indikator überquert, und zwar genau einmal mit der Einstellung von Stop Loss und Take Profit von 10 Punkten. Und wenn es andersherum ist, dann verkaufen Sie.

Das Problem ist, dass er immer kauft und verkauft, aber nur solange, wie er freies Geld auf der Einlage hat, und nicht nur einmal. Mit anderen Worten: Sobald der Preis über das Niveau von Sar steigt, kauft er so lange, bis der Preis höher ist, und sobald der Preis unter Sar liegt, verkauft er so lange, bis der Preis darunter liegt.

Die Frage ist vielmehr: Wie kann unser EA dazu gebracht werden, nur ein Geschäft zu tätigen, wenn diese Bedingungen auftreten, und nicht eine endlose Reihe von ihnen?

Hier ist der Code meines Expert Advisors.

//+------------------------------------------------------------------+
//|                                    Current_sar_value_summary.mq4 |
//|                                         Орлов Денис Владимирович |
//|                                                 orlovkem@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Орлов Денис Владимирович"
#property link      "orlovkem@mail.ru"

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
                     //объявляем переменные
   double _sar_value; //текущий уровень Сар
   double _price;       //текущий уровень цены
   int _ticket;      //возвращает количество открытых позиций
   
   _sar_value=iSAR(0,0,0.02,0.2,0);//приравнял переменную _sar_value к текущему значению индикатора Сар
   _price=Bid;                      //приравнял переменную _price к текущему уровню цены Бид
   
   //описываем условие покупки: если уровень цены был ниже значения сар
   if(_price<_sar_value)
           {
           if(_price>=_sar_value)// а потом стал выше, то покупаем
                {
                   Alert("Надо покупать");
                   _ticket=OrderSend(Symbol(),OP_BUY,1,Ask,1,Bid-10*Point,Ask+10*Point,NULL,0,0,Red);
                     
                          Print("OrderSend failed with error #",GetLastError());
                           return(0);
                 
                }
                 return(0);
           }
 
         
   if(_price>_sar_value)//описываем условие покупки: если уровень цены был выше значения сар
         {
           if(_price<=_sar_value)// а потом стал ниже, то продаем
            {
                   Alert("Надо продавать");
                   _ticket=OrderSend(Symbol(),OP_SELL,1,Bid,1,Ask+10*Point,Bid-10*Point,NULL,0,0,Red);
                     
                          Print("OrderSend failed with error #",GetLastError());
                           return(0);
                   
            }
            return(0);
            
         }
   
//----
   return(0);
  }
//+------------------------------------------------------------------+

Ich möchte Sie bitten, mir dabei zu helfen. Ich verspreche, dass ich, wenn ich ein Guru werde, die Anfragen von Leuten wie mir nicht ignorieren werde.

Mit freundlichen Grüßen, Denis Orlov.

 
orlovkem >> :

Liebe Forumsspezialisten, die auch früher fast nichts verstanden haben.

Ich versuche, einen einfachen Expert Advisor zu schreiben, der den Parabolic Sar Indikator als Trainingstool verwendet. Seine Aktion soll elementar sein: Wenn der Kurs unter dem Sar-Wert lag und dann anstieg, dann sollten wir genau in dem Moment kaufen, in dem der Kurs den Indikator überquert, und zwar genau einmal mit der Einstellung von Stop Loss und Take Profit von 10 Punkten. Und wenn es andersherum ist, dann verkaufen Sie.

Das Problem ist, dass er immer kauft und verkauft, aber nur solange, wie er freies Geld auf der Einlage hat, und nicht nur einmal. Mit anderen Worten: Sobald der Preis über das Niveau von Sar steigt, kauft er so lange, bis der Preis höher ist, und sobald der Preis unter Sar liegt, verkauft er so lange, bis der Preis darunter liegt.

Die Frage ist vielmehr: Wie kann unser EA dazu gebracht werden, nur ein Geschäft zu tätigen, wenn diese Bedingungen auftreten, und nicht eine endlose Reihe von ihnen?

Hier ist der Code meines Expert Advisors.

Ich möchte Sie um Hilfe bitten und verspreche, dass ich, wenn ich ein Guru werde, die Anfragen anderer Dummköpfe wie mir nicht ignorieren werde.

Mit freundlichen Grüßen, Denis Orlov.

Wo bewahren Sie den Vorhersagewert des Indikators auf? (in welcher Variable...?) dasselbe mit dem Preiswert

double _sar_value; //текущий уровень Сар
   double _price;       //текущий уровень цены

 
lascu.roman >> :

und wo haben Sie den vorherigen Wert des Indikators? (in welcher Variable...?) das gleiche mit dem Preiswert

Der Punkt ist, dass der vorherige Indikatorwert auf der vorherigen Kerze liegt und der Preis den Indikatorwert auf der aktuellen Kerze kreuzt.

Das Gleiche gilt für den Preis: Was bedeutet "vorheriger Preiswert", der Preis des vorherigen Ticks? oder der Schluss der vorherigen Kerze, aber das ist es nicht.

Ich verstehe, dass ich etwas hinzufügen muss, aber was genau, kann ich nicht verstehen. Bitte helfen Sie mir, dies ist meine erste Erfahrung.

>> Hochachtungsvoll, Orlov Denis.

 
orlovkem >> :

Der Punkt ist, dass der vorherige Indikatorwert auf der vorherigen Kerze liegt und der Preis den Indikatorwert auf der aktuellen Kerze kreuzt.

Das Gleiche gilt für den Preis: Was bedeutet "vorheriger Preiswert", der Preis des vorherigen Ticks? oder der Schluss der vorherigen Kerze, aber das ist es nicht.

Ich verstehe, dass ich etwas hinzufügen muss, aber was genau, kann ich nicht verstehen. Bitte helfen Sie mir, das ist meine erste Erfahrung.

Mit freundlichen Grüßen, Orlov Denis.

Haben Sie denn verstanden, was Sie gesagt haben? Sie prüfen den Wert zu einem bestimmten Zeitpunkt.

 if(_price<_sar_value)
           {
           if(_price>=_sar_value)// а потом стал выше, то покупаем

Zwei Bedingungen, die sich gegenseitig ausschließen. Wann ist er dann größer geworden?

 
Roger >> :

Haben Sie denn verstanden, was Sie gesagt haben? Sie prüfen den Wert zu einem bestimmten Zeitpunkt.

Zwei Bedingungen, die sich gegenseitig ausschließen. Wann ist sie höher geworden?

 if(_price<_sar_value)
           {
           if(_price>=_sar_value)// а потом стал выше, то покупаем

Vielleicht habe ich den Kommentar falsch formuliert, aber die Essenz ist immer noch wahr, das Preisniveau hat sich höher als der Indikatorwert, müssen Sie kaufen und es kauft, aber Sie haben es einmal zu tun, und die EA kauft, solange es Geld auf der Kaution ist. Sie müssen nur die Anzahl der Angebote begrenzen. Machen Sie nicht mehr als einen auf einmal, das ist es, was nicht funktioniert.

 
xruss >> :

aber wenn es eine Verkaufsorder in der Historie gab und der Expert Advisor sie dann geschlossen hat (in der Historie wird sie (ihr Abschluss) als t/p oder s/l angezeigt), wird sie dann als die letzte betrachtet?

Wenn eine Order (Kauf oder Verkauf) zuletzt geschlossen wurde (der Expert Advisor hat sie geschlossen, oder sie hat t/p oder s/l ausgelöst) und unter den Bedingungen von

if(OrderSymbol()==Symbol()){
if(OrderMagicNumber()==MagicNumber){

dann wird sie entsprechend als letzte betrachtet. Welche besondere Wirkung können Sie nicht erzielen?
 
Everlost >> :

Wenn eine Order (Kauf oder Verkauf) zuletzt geschlossen wurde (Expert Advisor hat sie geschlossen, oder t/p oder s/l wurde ausgelöst) und die Bedingungen erfüllt

if(OrderSymbol()==Symbol()){
if(OrderMagicNumber()==MagicNumber){

dann wird sie dementsprechend als die letzte betrachtet. Und was genau ist die Wirkung, die Sie nicht erzielen können?

Ja, das liegt wahrscheinlich daran, dass ich OrderMagicNumber() aus dem Code ausgeschlossen habe.

Ich möchte vermeiden, dass Aufträge wieder geöffnet werden, nachdem sie abgeschlossen wurden. Ich wollte es so einrichten, dass meine Aufträge nach dem Schließen nicht wieder geöffnet werden (es kommt manchmal vor, dass die Bedingungen für die Wiedereröffnung immer noch bestehen). Das Gleiche gilt für den Verkauf. Ich dachte, es wäre cool, in meinen Bedingungen anzugeben, wenn ich eine Kaufposition hatte und Gewinn gemacht habe - und nicht, um die Kaufposition wieder zu öffnen).

((

 
xruss писал(а) >>

Ja, das liegt wahrscheinlich daran, dass ich OrderMagicNumber() aus dem Code ausgeschlossen habe

Ich möchte erreichen, dass Aufträge nach dem Schließen nicht wieder geöffnet werden. Ich dachte, es wäre cool, wenn ich in den Bedingungen angeben würde, wenn ich eine Buy-Position hatte und einen Gewinn hatte - nicht wieder Buy zu öffnen. Aber es öffnet sich immer noch - Bastard!)))

((

Der einfachste Weg, die Anzahl der gleichzeitig geöffneten Aufträge zu kontrollieren

if(OrdersTotal()<1){

   .................
   .................
   условия установки ордеров 

}
 
goldtrader >> :

Lesen Sie die Beschreibung von OrderSend( ... ).

Die magische Zahl (magik) wird einem Auftrag zugewiesen, wenn er an den Server gesendet wird.

Dies wird hauptsächlich zur Identifizierung schwebender Aufträge/Positionen verwendet.

D.h., damit der EA keine "fremden" Aufträge anfasst. Dies wird von einem EA oder einem Skript erledigt.

Der Magier kann nicht manuell eingestellt werden. Sie legen die Regeln im EA/Skript selbst fest.

Der Magier ist in der Regel statisch, kann aber bei Bedarf auch dynamisch sein.

Schauen Sie sich einige einfache Beispiele von Kodobase an, und es sollte Ihnen klar werden.

Warum können Sie "Ihre" Bestellungen nicht anhand der Ticketnummer identifizieren? Sie sind einzigartig, unabhängig davon, wie viele Expert Advisors ausgeführt werden.

Zum Beispiel öffnet ein EA einen Auftrag, merkt sich das Ticket, schließt es und vergisst es wieder.

 
mukata >> :

Warum können Sie "Ihre" Bestellungen nicht anhand der Ticketnummer identifizieren? Sie sind einzigartig, unabhängig davon, wie viele Expert Advisors ausgeführt werden.

Zum Beispiel öffnet ein EA einen Auftrag, merkt sich das Ticket und vergisst es, danach schließt er es.

Tschubais wird den Strom abstellen und dann herausfinden, wo die anderen sind und wo sie sind.
Grund der Beschwerde: