Und machen wir einen "Cartoon" daraus (Mehrwährung) - Seite 6

 
Swan >> :

Fehler 130 die ganze Zeit.

StopLevel sollte überprüft werden, für StopLoss und Enter.


und auch

sollte der höchste Wert gewählt werden?


-130 wahrscheinlich wegen eines Versuchs, eine Pending Order zu setzen, und der Preis ging über oder unter) im Code gibt es Zeilen unkommentiert mit Marketlevel ... dies ist die zukünftige Verfolgung des Preises, so gibt es keine dieser Fehler)

Niedrigster Tiefst- oder Höchststand des OrderOpenPrice für den Stop) Wenn kaufen, niedrigster H4-Tiefststand der 0-Kerze und 1-Kerze... und das höchste Hoch für einen Verkauf... In der Regel niedrigster Tiefst-/Höchstwert für Stopp

 
ALex2008 >> :

-130 wahrscheinlich wegen eines Versuchs, eine Pending Order zu setzen, und der Preis ging höher oder niedriger) in den Code gibt es Zeilen unkommentiert mit Marketlevel... das ist die Zukunft Preis Tracking, so dass es keine dieser Fehler).

Niedrigster Tiefst- oder Höchststand des OrderOpenPrice für den Stop) Wenn kaufen, wählen Sie den niedrigsten H4-Tiefststand von 0 Kerze und 1 Kerze... und das höchste Hoch für einen Verkauf... Im Allgemeinen ist der niedrigste Tiefst-/Höchstwert für den Stopp

Um dies zu beheben, gehen Sie nun zum höchsten Tiefststand für den Kauf und zum niedrigsten Höchststand für den Verkauf.

oder wie folgt

StopLoss=MathMin(b0,b1);
StopLoss=MathMax(s0,s1);
 
Swan >> :

Nichts zu korrigieren, jetzt wird für den Kauf das größte Tief und für den Verkauf das kleinste Hoch gewählt.

Logischerweise ist das so!) Dies ist die Wahl für den Anschlag (es wird die kleinste der beiden Optionen gewählt)

Beispiel:


Aber Ihre Version ist besser und einfacher... Ich werde es korrigieren, aber in umgekehrter Reihenfolge) Danke.

StopLoss=MathMax(b0,b1);
StopLoss=MathMin(s0,s1);

Der Code auf Seite 5 wurde korrigiert.

 
ALex2008 >> :

Logischerweise ist das so!) Dies ist die Wahl für die Haltestelle (sie ist die kleinste der beiden Optionen in ppt.)



Taki für kaufen die kleinste)

imho besser die größte und Schleppnetz auf der ersten Bar, andere Logik :)


StopLevel.

können Sie Enter ändern

void UpTrend()
   {
   if(iOpen(NULL,PERIOD_H4,1) - iClose(NULL,PERIOD_H4,1) <= 0
   && iOpen(NULL,PERIOD_H4,2) - iClose(NULL,PERIOD_H4,2) > 0)
      {
      DellAllOrders();
      Enter=iHigh(NULL,PERIOD_H4,1)+(Ask-Bid)+10*Point;
      if( Enter-Ask< StopLevel) Enter=Ask+ StopLevel;
      OrderSend(Symbol(), OP_BUYSTOP, 0.1, Enter, 0, 0, Enter+ Profit, 0, 0,0, Green);
      }
   }

oder eine Bestellung eröffnen

void UpTrend()
   {
   if(iOpen(NULL,PERIOD_H4,1) - iClose(NULL,PERIOD_H4,1) <= 0
   && iOpen(NULL,PERIOD_H4,2) - iClose(NULL,PERIOD_H4,2) > 0)
      {
      DellAllOrders();
      Enter=iHigh(NULL,PERIOD_H4,1)+(Ask-Bid)+10*Point;
      if( Enter-Ask< StopLevel)
      OrderSend(Symbol(), OP_BUY, 0.1, Ask, 0, 0, Ask+ Profit, 0, 0,0, Green);
      else 
      OrderSend(Symbol(), OP_BUYSTOP, 0.1, Enter, 0, 0, Enter+ Profit, 0, 0,0, Green);
      }
   }

oder denken Sie an etwas anderes)

 
Swan писал(а) >>

taki für kaufen die kleinste)

imho besser, mit dem höchsten zu kaufen und Schleppnetz auf dem ersten bar, andere Logik :)

Mit StopLevel.

können Sie Enter ändern

oder eine Bestellung eröffnen

oder Sie lassen sich etwas anderes einfallen.)

Der Eröffnungskurs sollte um das StopLevel von Bid oder Ask weiter sein. Nehmen Sie vom Eröffnungskurs aus die Take- und Stop-Positionen ein, die ebenfalls nicht näher als das Stop-Level liegen sollten. Aber für sie können wir den Close-Block nach Gewinn oder Drawdown verwenden.

 
Swan >> :

...imho besser die größte und Schleppnetz die erste Bar, andere Logik :)

Habe es auch so gemacht... aber das Testergebnis ist an der aktuellen Haltestelle besser)

 

Das Stopplay wurde korrigiert...

//-------Поиск входа для установки ордеров, удаление старых ордеров и установка новых
void UpTrend(){
     if((iOpen(NULL,PERIOD_H4,1) - iClose(NULL,PERIOD_H4,1) <= 0) &&
        (iOpen(NULL,PERIOD_H4,2) - iClose(NULL,PERIOD_H4,2) > 0)){
         DellAllOrders();
         Enter=iHigh(NULL,PERIOD_H4,1)+(Ask-Bid)+10*Point;
         if(Ask<= Enter- StopLevel){
         RefreshRates();
         OrderSend(Symbol(), OP_BUYSTOP, 0.1, Enter, 0, 0, Enter+ Profit, 0, 0,0, Green);}
      }
  }
void DownTrend(){
     if((iOpen(NULL,PERIOD_H4,1) - iClose(NULL,PERIOD_H4,1) >= 0) &&
        (iOpen(NULL,PERIOD_H4,2) - iClose(NULL,PERIOD_H4,2) < 0)){
         DellAllOrders();
         Enter=iLow(NULL,PERIOD_H4,1)-10*Point;
         if(Bid>= Enter+ StopLevel){
         RefreshRates();
         OrderSend(Symbol(), OP_SELLSTOP, 0.1, Enter, 0, 0, Enter- Profit, 0, 0,0, Green);}
      }
  }

   
//-------Вычисление стопа и утановка
void SetStop(){
      RefreshRates();
      b0=iLow(NULL,PERIOD_H4,0)-10*Point;
      b1=iLow(NULL,PERIOD_H4,1)-10*Point;
      s0=iHigh(NULL,PERIOD_H4,0)+(Ask-Bid)+10*Point;
      s1=iHigh(NULL,PERIOD_H4,1)+(Ask-Bid)+10*Point;
            
         if( Type==0){
            StopLoss=MathMax( b0, b1);//Функция возвращает максимальное из двух числовых значений
            if(Bid- StopLoss< StopLevel) StopLoss=MathMin( b0, b1); 
            else OrderModify(OrderTicket(),OrderOpenPrice(), StopLoss,OrderTakeProfit(),0,Red);
         }
         if( Type==1){
            StopLoss=MathMin( s0, s1);//Функция возвращает минимальное из двух числовых значений
            if( StopLoss-Ask< StopLevel) StopLoss=MathMax( s0, s1);
            else OrderModify(OrderTicket(),OrderOpenPrice(), StopLoss,OrderTakeProfit(),0,Red);
         }
   }


Swan >> :

...oder eröffnen Sie gleich eine Bestellung.

(Es ist viel sicherer, mit schwebenden Aufträgen einzusteigen. Andernfalls wird Ihr Maklerunternehmen oder nofarms Sie sehr weit öffnen...))

>> den Code optimiert.

 
ALex2008 >> :

Die Zwischenlösung wurde korrigiert...


(Es ist besser, schwebende Aufträge zu verwenden) Andernfalls wird der DC etwas anzeigen oder nofarms wird Sie sehr weit öffnen...))

>> den Code korrigiert.

Alte Fehler beheben, neue hinzufügen :D


Auch das wurde korrigiert)

//+------------------------------------------------------------------+
//|                                                    CandyLite.mq4 |
//|                                                    Ш.Александр.В |
//|                                              shestovav@gmail.com |
//+------------------------------------------------------------------+
#property copyright "Ш.Александр.В"
#property link      "shestovav@gmail.com"

#include <stdlib.mqh>

extern double Profit = 3000;

int Type, Ticket;
double Stop, StopLevel, b0, b1, s0, s1, StopLoss, Enter;
bool dwn, up, mod;

int init(){
   Profit*=Point; 
   return(0);
  }

int deinit() {
   return(0);
  }

int start() {
   StopLevel=Point*MarketInfo(Symbol(),MODE_STOPLEVEL);   // вычисление стоплевел //Point*
   
   if(! WorkOrders()){
      UpTrend();
      DownTrend();
   }
      
   if( WorkOrders()){
      if (( Type<=1)&& ( Stop==0)) SetStop();
      if (( Type==1)||( Type==5)) UpTrend();
      if (( Type==0)||( Type==4)) DownTrend();
   }

   return(0);
  }
//-------Поиск входа для установки ордеров, удаление старых ордеров и установка новых
void UpTrend(){
     if((iOpen(NULL,PERIOD_H4,1) - iClose(NULL,PERIOD_H4,1) <= 0) &&
        (iOpen(NULL,PERIOD_H4,2) - iClose(NULL,PERIOD_H4,2) > 0)){
         DellAllOrders();
         Enter=iHigh(NULL,PERIOD_H4,1)+(Ask-Bid)+10*Point;
         if(Ask< Enter- StopLevel+0.5*Point){
         OrderSend(Symbol(), OP_BUYSTOP, 0.1, Enter, 0, 0, Enter+ Profit, 0, 0,0, Green);}
      }
  }
void DownTrend(){
     if((iOpen(NULL,PERIOD_H4,1) - iClose(NULL,PERIOD_H4,1) >= 0) &&
        (iOpen(NULL,PERIOD_H4,2) - iClose(NULL,PERIOD_H4,2) < 0)){
         DellAllOrders();
         Enter=iLow(NULL,PERIOD_H4,1)-10*Point;
         if(Bid> Enter+ StopLevel-0.5*Point){
         OrderSend(Symbol(), OP_SELLSTOP, 0.1, Enter, 0, 0, Enter- Profit, 0, 0,0, Green);}
      }
  }

//-------Вычисление стопа и установка
void SetStop(){
      RefreshRates();
      b0=iLow(NULL,PERIOD_H4,0)-10*Point;
      b1=iLow(NULL,PERIOD_H4,1)-10*Point;
      s0=iHigh(NULL,PERIOD_H4,0)+(Ask-Bid)+10*Point;
      s1=iHigh(NULL,PERIOD_H4,1)+(Ask-Bid)+10*Point;
            
         if( Type==0){
            StopLoss=MathMax( b0, b1);//Функция возвращает максимальное из двух числовых значений
            if(Bid- StopLoss< StopLevel-0.5*Point) StopLoss=MathMin( b0, b1); 
            if(Bid- StopLoss> StopLevel-0.5*Point)//можно попробовать убрать строку
            OrderModify(OrderTicket(),OrderOpenPrice(), StopLoss,OrderTakeProfit(),0,Red);
         }
         if( Type==1){
            StopLoss=MathMin( s0, s1);//Функция возвращает минимальное из двух числовых значений
            if( StopLoss-Ask< StopLevel-0.5*Point) StopLoss=MathMax( s0, s1);
            if( StopLoss-Ask> StopLevel-0.5*Point)//можно попробовать убрать строку
            OrderModify(OrderTicket(),OrderOpenPrice(), StopLoss,OrderTakeProfit(),0,Red);
         }
   }
   
//-------Удаление всех ордеров, открытых и отложенных
void DellAllOrders(){
      if( WorkOrders()){
      if( Type<=1)OrderClose( Ticket,OrderLots(),OrderClosePrice(),10);
      else OrderDelete( Ticket);}
  }
  
//-------Поиск ордеров
bool WorkOrders(){
      for (int i=OrdersTotal()-1; i>=0; i--){
      if (!OrderSelect( i, SELECT_BY_POS))  continue;
      if (OrderSymbol()!=Symbol())        continue;
      Type  = OrderType();
      Ticket=OrderTicket();
      Stop  =OrderStopLoss();
      return(true);}
  return(false);
  }
 
Swan >> :

Alte Fehler beheben, neue hinzufügen :D

wozu?

0.5*Point

Und MarketInfo() gibt den Typ double zurück, warum sollte es in Point konvertiert werden...?

Auch das... zwei Bedingungen.


if(Bid- StopLoss< StopLevel-0.5*Point) StopLoss=MathMin( b0, b1); 
if(Bid- StopLoss> StopLevel-0.5*Point)//можно попробовать убрать строку

Ich glaube, das ist alles, was mir aufgefallen ist. Es ist besser zu erklären, was geändert wurde, damit ich es mir für die Zukunft merken kann).

 
ALex2008 >> :

Das verstehe ich nicht...)

Und MarketInfo() gibt den Typ double zurück, warum sollte es in Point konvertiert werden...?

Das hier auch...


0,5*Punkt ist ein Delta, man kann es auch in 0,7 umrechnen :)

Siehe Vergleich von reellen Zahlen.

wird wahrscheinlich auch ohne sie funktionieren. in den meisten Fällen)


der Fehler war

MarketInfo(Symbol(),MODE_STOPLEVEL)

gibt er einen Wert in Pips zurück. multipliziert mit Point.


Es war

            if(Bid- StopLoss< StopLevel) StopLoss=MathMin( b0, b1); 
            else OrderModify(OrderTicket(),OrderOpenPrice(), StopLoss,OrderTakeProfit(),0,Red);

wenn wahr, wird StopLoss ein neuer Wert zugewiesen,

Andernfalls wird der Auftrag geändert.

kein Fehler, aber ich muss entweder ein Kreuz ausziehen oder eine Hose anziehen)

Grund der Beschwerde: