Überprüfung des Mindeststopps in den auf dem Marktplatz veröffentlichten EAs. - Seite 11

 
Vladimir Gribachev:

Nun, auf dem MetaQuotes-Demo-Server (auf dem der Moderator Tests durchführt) kehrt der Mindeststopplevel normal zurück. Überzeugen Sie sich selbst, 0 wird es nicht.

Ich weiß nicht, auf welchem Server der Moderator getestet wird, aber der Topik-Starter hat nach einem Füllstand gesucht und das Produkt zur Verbesserung des Fehlers 130 zurückgegeben. Lesen Sie das Thema von Anfang an.
 
Vitalii Ananev:
Ich weiß nicht, auf welchem Server der Testmoderator tätig war, aber der Themenstarter hatte eine Prüfung auf einen Füllstand und das Produkt wurde wegen eines Fehlers 130 zur Verbesserung an ihn zurückgeschickt. Lesen Sie das Thema von Anfang an.

In seinem Fall kann 130 nicht nur auftreten, wenn Eulen versuchen, einen Stop-Loss zu nahe am Markt zu platzieren.

Es ist besser, dies direkt beim Senden oder Ändern einer slp zu prüfen.

 
Vladimir Gribachev:

Frage: Warum sollte man einen Stop-Loss von 1 Punkt auf den Real setzen?

Mir fällt gerade ein... Ich habe einen solchen Algorithmus einmal mit einem minimalen Stop-Loss getestet, die Prüfung ist im Grunde dieselbe, und es gab keine Fehler und keine Gewinne.

Ich habe 60 Marketplace-Produkte verkauft - ich habe 80 freiberufliche Aufgaben geschrieben - ich hatte eine Werbeseite für das Schreiben von Expert Advisors, und ich habe es jahrelang gemacht.

Und plötzlich fragt der Themenstarter, was man gegen das Null-Stopleveling tun kann und sagt, dass die Marktplatzmoderatoren die Marktplatz-EAs irgendwie seltsam überprüfen.

Im Gegensatz zu seinen Äußerungen lesen die Forumsnutzer, die Erfahrung mit der Entwicklung haben, die Erfahrung mit der Vermarktung von Produkten haben, seine Äußerungen und sind perplex.

Mir scheint - der Themenstarter befindet sich in einem Zustand völliger Unzulänglichkeit und hat sich das Problem stumpf aus der Hand gesaugt.

 
Andrey F. Zelinsky:

Der Verkäufer von 60 Marktplatzprodukten -- der 80 Aufgaben in lokaler Freiberuflichkeit geschrieben hat -- der eine Website hat, die für das Schreiben von EAs wirbt -- und das alles ist noch lange nicht das erste Jahr -- ist der Themenstarter.

Und plötzlich fragt der Themenstarter, was man gegen das Null-Stopleveling tun kann und sagt, dass die Marktplatzmoderatoren die Marktplatz-EAs irgendwie seltsam überprüfen.

Im Gegensatz zu seinen Äußerungen lesen die Forumsnutzer, die Erfahrung mit der Entwicklung haben, die Erfahrung mit der Vermarktung von Produkten haben, seine Äußerungen und sind perplex.

Mir scheint - der Themenstarter befindet sich in einem Zustand völliger Unzulänglichkeit und hat sich das Problem stumpf aus der Hand gesaugt.

Vielleicht will er nur kommunizieren? ) Die Programmierung von Bots ist ein sehr einsames Geschäft
 
lilita bogachkova:

den hier veröffentlichten Code:

double point=SymbolInfoDouble(symToWorkmodify,SYMBOL_POINT);
int spread=(ask-bid)/point;

Auf diese Weise können Sie nicht durch einen Punkt dividieren, da der Wert der FunktionSymbolInfoDouble(symToWorkmodify,SYMBOL_POINT) gleich Null sein kann.
Dies gilt auch für andere Marktfunktionen.

Zum Beispiel führte die Verwendung vonAccountInfoInteger(ACCOUNT_LEVERAGE) in Berechnungen bei der Meisterschaft 2010 bei einigen EAs zu einem Absturz mit einemZero Divide-Fehler, wenn diese Funktion bei OnInit 0 zurückgab.

 
Vladimir Gribachev:

Frage: Warum setzen Sie einen Stop-Loss von 1 Punkt auf den Real?

Mir fällt gerade ein... Ich habe einmal einen ähnlichen Algorithmus mit einem minimalen Stop-Loss getestet, die Prüfung war im Grunde dieselbe und es gab weder Fehler noch Gewinne.

Schauen Sie sich den Kern der Sache an. Hier geht es nicht darum, warum ich einen Stop-Loss von 1 Pip gesetzt habe. Der Punkt ist, dass der Stop-Loss geringer sein kann als der Stop-Loss, der vom Broker versteckt und auf der Grundlage der Spread-Breite berechnet wird.

Um den Kern des Problems zu verdeutlichen, zeige ich Ihnen einen Expert Advisor, der Ihren Algorithmus zur Überprüfung von Stopps verwendet:

#property strict
//--- input parameters
input int      i_slSize          = 10;
input int      i_tpSize          = 10;
input int      i_magicNumber     = 32847623;

int OnInit()
{
   Print("Величина стоплевел: ", MarketInfo(_Symbol,MODE_STOPLEVEL));
   return(INIT_SUCCEEDED);
}

int GetExpertOrderTicket()
{
   for (int i = OrdersTotal() - 1; i >= 0; i--)
   {
      if (!OrderSelect(i, SELECT_BY_POS))          
         continue;
         
      if (OrderSymbol() != Symbol())
         continue;   
         
      if (OrderMagicNumber() != i_magicNumber)
         continue;
         
      if (OrderType() == OP_BUY)
         return OrderTicket();
   }
   
   return -1;
}

void OnTick()
{
   int ticket = GetExpertOrderTicket();
   if (ticket < 0)
   {
      ticket = OrderSend(Symbol(), OP_BUY, 0.01, Ask, 30, 0.0, 0.0, NULL, i_magicNumber);
      return;
   }
      
   if (!OrderSelect(ticket, SELECT_BY_TICKET) || OrderCloseTime() != 0 || OrderStopLoss() > 0.0 || OrderTakeProfit() > 0.0)
      return;
      
   double SL=NormalizeDouble(OrderOpenPrice()-MathMax(i_slSize,(int)MarketInfo(_Symbol,MODE_STOPLEVEL))*_Point,_Digits);
   double TP=NormalizeDouble(OrderOpenPrice()+MathMax(i_tpSize,(int)MarketInfo(_Symbol,MODE_STOPLEVEL))*_Point,_Digits);
   
   bool result = OrderModify(ticket, 0.0, SL, TP, 0);
}

Testergebnis eines solchen Expert Advisors:

0       14:52:30.354    Expert CheckStopLevel EURUSD,H1: removed
0       14:52:30.372    Expert CheckStopLevel EURUSD,H1: loaded successfully
0       14:52:30.390    Tester: template 'D:\ForexDC\Alpari\templates\tester.tpl' applied
0       14:52:30.395    TestGenerator: current spread 10 used
2       14:52:32        2015.01.12 00:00  CheckStopLevel inputs: i_slSize=10; i_tpSize=10; i_magicNumber=32847623; 
0       14:52:32        2015.01.12 00:00  CheckStopLevel EURUSD,H1: Величина стоплевел: 0.0
2       14:52:32        2015.01.12 00:00  CheckStopLevel EURUSD,H1: open #1 buy 0.01 EURUSD at 1.18674 ok
3       14:52:35        2015.01.12 00:00  CheckStopLevel EURUSD,H1: OrderModify error 130
3       14:52:35        2015.01.12 00:00  CheckStopLevel EURUSD,H1: OrderModify error 130
3       14:52:35        2015.01.12 00:00  CheckStopLevel EURUSD,H1: OrderModify error 130
3       14:52:35        2015.01.12 00:00  CheckStopLevel EURUSD,H1: OrderModify error 130
3       14:52:35        2015.01.12 00:00  CheckStopLevel EURUSD,H1: OrderModify error 130
3       14:52:35        2015.01.12 00:00  CheckStopLevel EURUSD,H1: OrderModify error 130
3       14:52:35        2015.01.12 00:00  CheckStopLevel EURUSD,H1: OrderModify error 130
3       14:52:35        2015.01.12 00:00  CheckStopLevel EURUSD,H1: OrderModify error 130
3       14:52:35        2015.01.12 00:00  CheckStopLevel EURUSD,H1: OrderModify error 130
3       14:52:35        2015.01.12 00:00  CheckStopLevel EURUSD,H1: OrderModify error 130
3       14:52:36        2015.01.12 00:00  CheckStopLevel EURUSD,H1: OrderModify error 130

Wie Sie sehen können, besteht die Methode den elementaren Test nicht.

 
Ihor Herasko:

Gehen Sie der Sache auf den Grund. Es geht nicht darum, warum Sie einen 1-Punkt-Stoploss setzen sollten. Es geht um...

Wenn man der Sache auf den Grund geht, muss man unterscheiden zwischen a) "den Käufer des Entwicklers für dumm verkaufen" und b) sich darauf verlassen, dass der Käufer ein Idiot ist. Es handelt sich um unterschiedliche Schutzmaßnahmen.

Kein vernünftiger Käufer würde eine negative Bewertung abgeben und aufhören. Wenn man also prüft, "wie der EA auf einen negativen Stop-and-Take reagieren wird", geht man davon aus, dass der Käufer ein Idiot ist.

Einen EA zu erstellen, in dem ein benutzerdefinierter Take und Stop gezwungen wird, kontinuierlich um einen unverständlichen Wert von "2 Spreads" zu steigen - das ist "foolproofing" - nur ein Schutz vor einem "Dummkopf von einem Entwickler".

Vor allem, wenn der Entwickler einen solchen Schutz anbringt, um die Marktmoderation zu bestehen.

 
Andrey F. Zelinsky:

Wenn man den Kern der Sache betrachtet, muss man unterscheiden zwischen a) "den Erwerber des Bauunternehmens für dumm verkaufen" und b) sich darauf verlassen, dass der Erwerber ein Idiot ist. Es handelt sich um unterschiedliche Schutzmaßnahmen.

Kein vernünftiger Käufer würde eine negative Bewertung abgeben und aufhören. Wenn man also prüft, "wie der EA auf einen negativen Stop-and-Take reagieren wird", geht man davon aus, dass der Käufer ein Idiot ist.

Einen EA zu erstellen, bei dem der benutzerdefinierte Take und Stop gezwungen ist, kontinuierlich um einen unverständlichen Betrag von "2 Spreads" zu steigen, ist "idiotensicher", aber nur idiotensicher, wenn man das Produkt nicht vom "idiotensicheren Entwickler" kauft.

Glauben Sie, dass es hier viele vernünftige Menschen gibt? :) Vor allem bei den Käufern.
 
Ihor Herasko:

Gehen Sie der Sache auf den Grund. Es geht nicht darum, warum Sie einen Stop-Loss von 1 Pip setzen sollten. Es geht darum, dass der Stop-Loss geringer sein kann als der Stop-Loss, der vom Broker verborgen wird und auf der Basis der Spread-Breite berechnet wird.

Um das Problem zu verdeutlichen, zeige ich Ihnen einen Expert Advisor, der Ihren Algorithmus zur Überprüfung von Stopps verwendet:

Testergebnis eines solchen Expert Advisors:

Wie man sieht, besteht die Methode die Elementarprüfung nicht.

Wenn es so schlimm ist, hier ist

#property strict
//--- input parameters
input int      i_slSize          = 10;
input int      i_tpSize          = 10;
input int      i_magicNumber     = 32847623;

int OnInit()
{
   Print("Величина стоплевел: ", MarketInfo(_Symbol,MODE_STOPLEVEL));
   return(INIT_SUCCEEDED);
}

int GetExpertOrderTicket()
{
   for (int i = OrdersTotal() - 1; i >= 0; i--)
   {
      if (!OrderSelect(i, SELECT_BY_POS))          
         continue;
         
      if (OrderSymbol() != Symbol())
         continue;   
         
      if (OrderMagicNumber() != i_magicNumber)
         continue;
         
      if (OrderType() == OP_BUY)
         return OrderTicket();
   }
   
   return -1;
}

void OnTick()
{
   int ticket = GetExpertOrderTicket();
   if (ticket < 0)
   {
      ticket = OrderSend(Symbol(), OP_BUY, 0.01, Ask, 30, 0.0, 0.0, NULL, i_magicNumber);
      return;
   }
      
   if (!OrderSelect(ticket, SELECT_BY_TICKET) || OrderCloseTime() != 0 || OrderStopLoss() > 0.0 || OrderTakeProfit() > 0.0)
      return;
      
   double SL=NormalizeDouble(Bid-MathMax(i_slSize,(int)MarketInfo(_Symbol,MODE_STOPLEVEL))*_Point,_Digits);
   double TP=NormalizeDouble(Bid+MathMax(i_tpSize,(int)MarketInfo(_Symbol,MODE_STOPLEVEL))*_Point,_Digits);
   
   bool result = OrderModify(ticket, 0.0, SL, TP, 0);
}

Protokoll

2016.03.16 15:09:35.611 GBPUSD,H1: 94 tick events (1095 bars, 286082 bar states) processed in 0:00:06.037 (total time 0:00:10.109)
2016.03.16 15:09:35.611 2016.03.01 00:12  Tester: order #14  is closed
2016.03.16 15:09:35.588 2016.03.01 00:12  Tester: stop button pressed
2016.03.16 15:09:35.547 2016.03.01 00:12  abcd GBPUSD,H1: modify #14  buy 0.01 GBPUSD at 1.39165 sl: 1.39130 tp: 1.39154 ok
2016.03.16 15:09:35.483 2016.03.01 00:12  abcd GBPUSD,H1: open #14  buy 0.01 GBPUSD at 1.39165 ok
2016.03.16 15:09:35.483 2016.03.01 00:12  Tester: take profit #13  at 1.39144 (1.39144 / 1.39165)
2016.03.16 15:09:35.099 2016.03.01 00:12  abcd GBPUSD,H1: modify #13  buy 0.01 GBPUSD at 1.39156 sl: 1.39120 tp: 1.39144 ok
2016.03.16 15:09:35.035 2016.03.01 00:11  abcd GBPUSD,H1: open #13  buy 0.01 GBPUSD at 1.39156 ok
2016.03.16 15:09:35.035 2016.03.01 00:11  Tester: stop loss #12  at 1.39148 (1.39135 / 1.39156)
2016.03.16 15:09:34.971 2016.03.01 00:11  abcd GBPUSD,H1: modify #12  buy 0.01 GBPUSD at 1.39171 sl: 1.39148 tp: 1.39172 ok
2016.03.16 15:09:34.907 2016.03.01 00:11  abcd GBPUSD,H1: open #12  buy 0.01 GBPUSD at 1.39171 ok
2016.03.16 15:09:34.907 2016.03.01 00:11  Tester: take profit #11  at 1.39143 (1.39150 / 1.39171)
2016.03.16 15:09:34.267 2016.03.01 00:10  abcd GBPUSD,H1: modify #11  buy 0.01 GBPUSD at 1.39147 sl: 1.39119 tp: 1.39143 ok
2016.03.16 15:09:34.203 2016.03.01 00:10  abcd GBPUSD,H1: open #11  buy 0.01 GBPUSD at 1.39147 ok
2016.03.16 15:09:34.203 2016.03.01 00:10  Tester: stop loss #10  at 1.39132 (1.39126 / 1.39147)
2016.03.16 15:09:33.947 2016.03.01 00:10  abcd GBPUSD,H1: modify #10  buy 0.01 GBPUSD at 1.39174 sl: 1.39132 tp: 1.39156 ok
2016.03.16 15:09:33.883 2016.03.01 00:10  abcd GBPUSD,H1: open #10  buy 0.01 GBPUSD at 1.39174 ok
2016.03.16 15:09:33.883 2016.03.01 00:10  Tester: stop loss #9  at 1.39157 (1.39153 / 1.39174)
2016.03.16 15:09:33.435 2016.03.01 00:09  abcd GBPUSD,H1: modify #9  buy 0.01 GBPUSD at 1.39186 sl: 1.39157 tp: 1.39181 ok
2016.03.16 15:09:33.371 2016.03.01 00:09  abcd GBPUSD,H1: open #9  buy 0.01 GBPUSD at 1.39186 ok
2016.03.16 15:09:33.371 2016.03.01 00:09  Tester: take profit #8  at 1.39163 (1.39165 / 1.39186)
2016.03.16 15:09:32.603 2016.03.01 00:06  abcd GBPUSD,H1: modify #8  buy 0.01 GBPUSD at 1.39173 sl: 1.39139 tp: 1.39163 ok
2016.03.16 15:09:32.539 2016.03.01 00:06  abcd GBPUSD,H1: open #8  buy 0.01 GBPUSD at 1.39173 ok
2016.03.16 15:09:32.539 2016.03.01 00:06  Tester: take profit #7  at 1.39152 (1.39152 / 1.39173)
2016.03.16 15:09:32.346 2016.03.01 00:06  abcd GBPUSD,H1: modify #7  buy 0.01 GBPUSD at 1.39173 sl: 1.39128 tp: 1.39152 ok
2016.03.16 15:09:32.282 2016.03.01 00:06  abcd GBPUSD,H1: open #7  buy 0.01 GBPUSD at 1.39173 ok
2016.03.16 15:09:32.282 2016.03.01 00:06  Tester: take profit #6  at 1.39148 (1.39152 / 1.39173)
2016.03.16 15:09:32.025 2016.03.01 00:05  abcd GBPUSD,H1: modify #6  buy 0.01 GBPUSD at 1.39155 sl: 1.39124 tp: 1.39148 ok
2016.03.16 15:09:31.961 2016.03.01 00:05  abcd GBPUSD,H1: open #6  buy 0.01 GBPUSD at 1.39155 ok
2016.03.16 15:09:31.961 2016.03.01 00:05  Tester: stop loss #5  at 1.39140 (1.39134 / 1.39155)
2016.03.16 15:09:31.249 2016.03.01 00:04  abcd GBPUSD,H1: modify #5  buy 0.01 GBPUSD at 1.39170 sl: 1.39140 tp: 1.39164 ok
2016.03.16 15:09:31.185 2016.03.01 00:04  abcd GBPUSD,H1: open #5  buy 0.01 GBPUSD at 1.39170 ok
2016.03.16 15:09:31.185 2016.03.01 00:04  Tester: take profit #4  at 1.39147 (1.39149 / 1.39170)
2016.03.16 15:09:30.801 2016.03.01 00:02  abcd GBPUSD,H1: modify #4  buy 0.01 GBPUSD at 1.39159 sl: 1.39123 tp: 1.39147 ok
2016.03.16 15:09:30.737 2016.03.01 00:01  abcd GBPUSD,H1: open #4  buy 0.01 GBPUSD at 1.39159 ok
2016.03.16 15:09:30.737 2016.03.01 00:01  Tester: take profit #3  at 1.39136 (1.39138 / 1.39159)
2016.03.16 15:09:30.481 2016.03.01 00:01  abcd GBPUSD,H1: modify #3  buy 0.01 GBPUSD at 1.39143 sl: 1.39112 tp: 1.39136 ok
2016.03.16 15:09:30.417 2016.03.01 00:01  abcd GBPUSD,H1: open #3  buy 0.01 GBPUSD at 1.39143 ok
2016.03.16 15:09:30.417 2016.03.01 00:01  Tester: stop loss #2  at 1.39126 (1.39122 / 1.39143)
2016.03.16 15:09:30.225 2016.03.01 00:00  abcd GBPUSD,H1: modify #2  buy 0.01 GBPUSD at 1.39156 sl: 1.39126 tp: 1.39150 ok
2016.03.16 15:09:30.161 2016.03.01 00:00  abcd GBPUSD,H1: open #2  buy 0.01 GBPUSD at 1.39156 ok
2016.03.16 15:09:30.161 2016.03.01 00:00  Tester: take profit #1  at 1.39135 (1.39135 / 1.39156)
2016.03.16 15:09:29.647 2016.03.01 00:00  abcd GBPUSD,H1: modify #1  buy 0.01 GBPUSD at 1.39148 sl: 1.39111 tp: 1.39135 ok
2016.03.16 15:09:29.583 2016.03.01 00:00  abcd GBPUSD,H1: open #1  buy 0.01 GBPUSD at 1.39148 ok
2016.03.16 15:09:29.583 2016.03.01 00:00  abcd GBPUSD,H1: Величина стоплевел: 12.0
2016.03.16 15:09:29.574 2016.03.01 00:00  abcd inputs: i_slSize=10; i_tpSize=10; i_magicNumber=32847623; 
2016.03.16 15:09:27.513 TestGenerator: current spread 21 used

und keine Probleme.

Aber wenn es so schlimm ist, wieAndrey F. Zelinsky zu Recht feststellt

Wenn Sie einen EA verschlimmern wollen, nur um zur Marktplatz-Moderation zu gehen, ist das unangemessen.

Wenn mein EA nicht auf 130. Fehler geprüft wurde und +1 zu den Stops hinzufügt. Aber das ist einfach Unsinn.
 
Maxim Dmitrievsky:
Glauben Sie, dass es hier viele vernünftige Menschen gibt? :) Vor allem bei den Käufern.

Ich denke, wenn man nachforscht - es gibt mehr vernünftige Käufer als vernünftige Entwickler.

Der Käufer kann sich irren. Man kann es dem Kunden verständlich machen. Sie können überredet werden.

Aber wenn der Entwickler ein Problem mit dem gesunden Menschenverstand hat, kann es nicht gelöst werden.

Die Funktionalität des Expert Advisors zu beeinträchtigen, nur um auf den Markt zu gehen - das ist unzureichend.

Grund der Beschwerde: