Wer kann mit dem Roboter helfen, warum funktioniert er nicht? - Seite 3

 
Für GIM
Wenn Sie nur Aufträge eröffnen wollen, geben Sie 0 anstelle von SL / TP an. Wenn SL oder TP 0 ist, müssen Sie in Ihrer Anfrage 0 eingeben, und wenn Sie einen Wert eingeben, müssen Sie den Preis berechnen, zu dem der Auftrag geschlossen wird.
 
Dmitriy Gizlyk:
Für GIM
Wenn Sie nur Aufträge eröffnen wollen, geben Sie 0 anstelle von SL / TP an. Und für den Future müssen Sie prüfen: wenn SL oder TP 0 ist, dann müssen Sie 0 in der Anfrage angeben. Und wenn Sie einen Wert angeben, dann berechnen Sie den Schlusskurs der Order.
Ich möchte, dass der Expert Advisor Aufträge entsprechend dem Gesamtgewinn für alle Trades öffnet und schließt....
 
AdikAmir:

extern double Lots=0.1;
extern intnal double FastMAPeriod=5;
extern int FastMAMethod=0; // 0-SMA, 1-EMA, 2-SMMA, 4-LWMA
extern int FastMAPrice=0; // 0-Close, 1-Open, 2-High, 3-Low, 4-Median, 5-Typical, 6-Weighted
extern int SlowMAPeriod=75;
extern intn SlowMAMethod=3; // 0-SMA, 1-EMA, 2-SMMA, 4-LWMA
extern int SlowMAPrice=3; // 0-Close, 1-Open, 2-High, 3-Low, 4-Median, 5-Typical, 6-Weighted
extern int TP=500; //Gewinn erzielen
extern int SL=250; //Verluststop
Doppeltes Ticet;

int start(){

double fast_ma1=iMA(NULL,0,FastMAPeriod,0,FastMAMethod,FastMAPrice,1);
double slow_ma1=iMA(NULL,0,SlowMAPeriod,0,SlowMAMethod,SlowMAPrice,1);
double fast_ma2=iMA(NULL,0,FastMAPeriod,0,FastMAMethod,FastMAPrice,2);
double slow_ma2=iMA(NULL,0,SlowMAPeriod,0,SlowMAMethod,SlowMAPrice,2);

if (AufträgeSumme()==0)
{
if (fast_ma1>slow_ma1 && (fast_ma2<slow_ma2))
{ ticet = OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Ask-SL*Point,Ask+TP*Point,NULL,0,0,CLR_NONE);
if (ticet==0) Print("ERROR");
}
if (slow_ma1>fast_ma1 && (slow_ma2<fast_ma2))
{
ticet = OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid-SL*Point,Bid+TP*Point,NULL,0,0,CLR_NONE);
if (ticet==0) Print("ERROR");
}

}

zurück(0);
}




Lesen Sie das Protokoll. Möglicherweise gibt es dort Meldungen über Fehler, die beim Kompilieren nicht erkannt wurden.

Hier liegt ein Fehler vor OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid-SL*Point,Bid+TP*Point,NULL,0,0,CLR_NONE);

müssen Sie wie folgt vorgehen OrderSend(Symbol(),OP_SELL,Lots,Bid,Bid,3,Ask+SL*Point,Bid-TP*Point,NULL,0,0,CLR_NONE);

Wenn Sie verkaufen, sollte der Stop-Loss über dem aktuellen Kurs liegen und der Take darunter. In Ihrem Fall hingegen haben Sie den Stop unter den Kurs gesetzt und der Take liegt darüber.

 
GIM:
Ich möchte, dass der Expert Advisor Aufträge nach Gesamtgewinn für alle Trades öffnet und schließt....

In diesem Fall setzen Sie bei der Eröffnung einer Position SL=0, TP=0.

Um eine Position zu schließen, müssen wir den erzielten Gewinn bei jedem Tick mit dem eingestellten Wert vergleichen. Und wenn der Gewinn den angegebenen Wert erreicht, müssen wir alle Aufträge in der Schleife durch OrderClose(....) schließen.

Je nach Aufgabendefinition des aktuellen Gewinns kann es Abweichungen geben. Wenn Sie sich den Gewinn des Kontos ansehen, können Sie einfach AccountProfit() nehmen, aber der arbeitsintensivere Weg ist wahrscheinlich durch eine Schleife (dann können wir den Gewinn nur für die notwendigen Aufträge berechnen).

   double profit=0;
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==_Symbol && OrderMagicNumber()== /* Ваш магик */)
        {
         profit+=OrderProfit()+OrderSwap()+OrderCommission();
        }
     }
 
Dmitriy Gizlyk:

In diesem Fall setzen Sie bei der Eröffnung einer Position SL=0, TP=0.

Um eine Position zu schließen, müssen wir den erzielten Gewinn bei jedem Tick mit dem eingestellten Wert vergleichen. Und wenn der Gewinn den angegebenen Wert erreicht, müssen wir alle Aufträge in der Schleife durch OrderClose(....) schließen.

Was die Ermittlung des laufenden Gewinns betrifft, so kann es je nach Aufgabenstellung Abweichungen geben. Wenn Sie sich den Gewinn des Kontos ansehen, können Sie einfach AccountProfit() nehmen, aber der arbeitsintensivere Weg ist wahrscheinlich durch einen Zyklus (dann können Sie den Gewinn von nur notwendigen Bestellungen berechnen).

extern double  lots       = 0.01;
extern int  stop_loss      = 0;  
extern int take_profit    = 0;

int            last_bar       = 0;

int start(){
   if (last_bar == Bars) return(0);
   last_bar = Bars;
   if (OrdersTotal() == 0){
          OrderSend(Symbol(), OP_BUY, lots ,Ask, 50, Bid - stop_loss * Point, Ask + take_profit * Point,  "", 1, 0, clrBlue);
          OrderSend(Symbol(), OP_SELL, lots ,Bid, 50, Ask+ stop_loss * Point, Bid - take_profit * Point,  "", 1, 0, clrRed);      
}
   return(0); 
}
 double profit=0;
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==_Symbol && OrderMagicNumber()== /* Ваш магик */)
        {
         profit+=OrderProfit()+OrderSwap()+OrderCommission();
        }
     }
 
GIM:
Wenn Stoploss und Take Profit auf die Währung der Einzahlung lauten
extern double  lots       = 0.01;
extern int  stop_loss      = 10;  /* Указываем в валюте депозита */
extern int take_profit    = 20;   /* Указываем в валюте депозита */
extern int Magic          = 1;

int            last_bar       = 0;

int start(){
   if (last_bar == Bars) return(0);
   last_bar = Bars;
   if (OrdersTotal() == 0){
          OrderSend(Symbol(), OP_BUY, lots ,Ask, 50, 0, 0,  "", Magic, 0, clrBlue);
          OrderSend(Symbol(), OP_SELL, lots ,Bid, 50, 0, 0,  "", Magic, 0, clrRed);      
}
 double profit=0;
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==_Symbol && OrderMagicNumber()== Magic)
        {
         profit+=OrderProfit()+OrderSwap()+OrderCommission();
        }
     }
 int requot=0;
 if(profit>=take_profit || (-profit)>=stop_loss)
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==_Symbol && OrderMagicNumber()== Magic)
        {
         if(OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),50,clrRed))
               requot=0;
            else
              {
               requot++;
              }
         if(requot>10)
              {
               i++;
               requot=0;
              }
            i--;
        }
     }
   return(0); 
}
 
Dmitriy Gizlyk:
Wenn Stoploss und Take Profit in der Einzahlungswährung angegeben sind

for(int i=0;i<OrdersTotal();i++)

Fehler: "i"

 
Wer weiß?
extern int Magic          = 1;


что означает??
 
GIM:
Wer weiß

Die Kennung der Aufträge des Expert Advisors, so dass er nur mit seinen eigenen Aufträgen arbeitet.

 
Vladimir Zubov:

Die Kennung der Aufträge des Expert Advisors, so dass er nur mit seinen eigenen Aufträgen arbeitet.

Was meinen Sie, nur mit eigenen Aufträgen....
Grund der Beschwerde: