[ARCHIV] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 3. - Seite 458

 
mamba5:

Beim Testen von EA erhalte ich den Fehler 130 - falsche Stopps. In der Funktion NewOrder sollten die externen Variablen TakeProfit und StopLoss übergeben werden, und es scheint mir, dass ich alles getan habe, um dies zu erreichen, aber wie der Ausdruck zeigt, werden Nullen übergeben. Ich verstehe, dass der Grund für diesen Fehler hier liegt, aber ich habe ihn noch nicht finden können. Bitte helfen Sie mir.

extern int TakeProfit=100;
extern int StopLoss=100;

....................................

NewOrder(OP_BUYSTOP, Lot, TakeProfit, StopLoss);
NewOrder(OP_SELLSTOP, Lot, TakeProfit, StopLoss);

int NewOrder(int Cmd,double Lot,int TakeProfit,int StopLoss)

Das Problem dabei ist, dass es globale Variablen StopLoss gibt, die als Parameter an die Prozedur übergeben werden. Es ist besser, sie während des Verfahrens umzubenennen.

 
fore-x:

Как в mql4 из одного индикатора управлять более чем 8 буферами обмена, существует ли способ обхода данного ограничения?

Ну, как пример, мне нужно построить более 8 индикаторных линий, но из одной программы.

Zhunko:

Trendlinien.

Und weitere Details? Geben Sie mir wenigstens einen Link, wo ich lesen kann?
 
splxgf:

Das Problem dabei ist, dass es globale StopLoss-Variablen gibt, die auch als Parameter an die Prozedur übergeben werden. Es ist besser, sie während des Verfahrens umzubenennen.


Sie haben Recht. Das ist wirklich logischer. Korrigiert:

//+----------Функция открытия ордера-----------------------------------+
int NewOrder(int Cmd,double Lot,int TaPr,int StLo)
{
 double TP=0;// тейкпрофит
 double SL=0;// стоплос
 double PR=0;// цена
 while(!IsTradeAllowed())Sleep(100);
 if(TaPr<MarketInfo(Symbol(),MODE_STOPLEVEL))  
    TaPr=MarketInfo(Symbol(),MODE_STOPLEVEL);
 if(StLo<MarketInfo(Symbol(),MODE_STOPLEVEL))  
    StLo=MarketInfo(Symbol(),MODE_STOPLEVEL);
 if(Cmd==OP_BUY)
   {
    PR=NormalizeDouble(Ask, Digits);
    if(TaPr>0)TP=NormalizeDouble(Ask,Digits)+NormalizeDouble(TaPr*Point,Digits);
    if(StLo>0)SL=NormalizeDouble(Bid,Digits)-NormalizeDouble(StLo*Point,Digits);
   }
 if(Cmd==OP_SELL)
   {
    PR=NormalizeDouble(Bid, Digits);
    if(TaPr>0)TP=NormalizeDouble(Bid,Digits)-NormalizeDouble(TaPr*Point,Digits);
    if(StLo>0)  SL=NormalizeDouble(Ask,Digits)+NormalizeDouble(StLo*Point,Digits);
   }
 Print("TaPr=",TaPr," StLo=",StLo," StopLevel=",MarketInfo(Symbol(),MODE_STOPLEVEL));
 tic=OrderSend(Symbol(),Cmd,Lot,PR,3,SL,TP,"",0,0,CLR_NONE);
 if(tic<0)Print("ошибка открытия ордера:",GetLastError()); Print("Cmd-",Cmd," Lot=",Lot," PR=",PR," SL=",SL," TP=",TP);
return(tic);
}
Aber es hat nicht viel geholfen. TaPr und StLo= 100, aber PR, SL und TP sind aus irgendeinem Grund Null.....
Dateien:
 

Hallo, können Sie mir helfen, eine Bedingung zu schreiben, so dass die Bestellung nur einmal öffnet, an diesem Punkt öffnet es auf jedem Tick

   topOrder=OrderSend(Symbol(),OP_BUYSTOP,1,Hinput,3,Price_high-(height_box/100*sl),Price_high+(height_box/100*tp),"my order #",16384,0,Green);
                     if (topOrder<0)
                        {
                           Print("Верхний ордер ошибка #", GetLastError());
                           return(0);
                        }

Ich muss nur etwas tun, damit es so aussieht: Wenn ich bereits eine Bestellung aufgegeben habe, wird keine weitere ohne OrderComment geöffnet, ich habe noch keine Ahnung, was ich damit machen soll

Vielen Dank im Voraus

 
fore-x:
Wie wäre es mit mehr Details? Geben Sie mir wenigstens einen Link, wo ich das nachlesen kann?
Welche Verbindung? Sie verbinden die Balken mit den Trendlinien. Sie werden unabhängig von den Puffern und ihren Störungen sein.
 
artmedia70:
Wenn Sie es nicht selbst in das Diagramm eintragen, wird es im EA nicht berücksichtigt. Wie haben Sie das gemacht?
Ich lasse den EA im Tester laufen. Wenn der Tester beendet ist, erscheinen die Informationen der Indikatorlinien.
 
mamba5:


Sie haben Recht. So macht es mehr Sinn. Korrigiert:

Aber es hat nicht viel geholfen. TaPr und StLo= 100, aber PR, SL und TP sind aus irgendeinem Grund Null


  NewOrder(OP_BUYSTOP, Lot, TakeProfit, StopLoss);
  NewOrder(OP_SELLSTOP, Lot, TakeProfit, StopLoss);
if(Cmd==OP_BUY)
   {
    PR=NormalizeDouble(Ask, Digits);
    if(TaPr>0)TP=NormalizeDouble(Ask,Digits)+NormalizeDouble(TaPr*Point,Digits);
    if(StLo>0)SL=NormalizeDouble(Bid,Digits)-NormalizeDouble(StLo*Point,Digits);
   }
 if(Cmd==OP_SELL)
   {
    PR=NormalizeDouble(Bid, Digits);
    if(TaPr>0)TP=NormalizeDouble(Bid,Digits)-NormalizeDouble(TaPr*Point,Digits);
    if(StLo>0)  SL=NormalizeDouble(Ask,Digits)+NormalizeDouble(StLo*Point,Digits);
   }
 

Bitte geben Sie an, wie man verlustbringende Geschäfte berechnet.

d.h. Geschäfte, die durch einen Stop-Loss geschlossen wurden.

und setzen Sie den Zähler nach einem gewinnbringenden Handel zurück.

D.h. nach dem Schließen auf Take Profit, um den Zähler auf Null zu setzen.

Anfängliche Zählerstelle = 1

int Schetcik = 1;

Alle Geschäfte, sowohl Käufe als auch Verkäufe, sollten gezählt werden.

 
Vinin:



Ich danke Ihnen! ))) Konnte den Fehler nicht sehen, bis er so deutlich verglichen wurde
 
belck:

Bitte geben Sie an, wie man verlustbringende Geschäfte berechnet.

d.h. Geschäfte, die durch einen Stop-Loss geschlossen wurden.

und setzen Sie den Zähler nach einem gewinnbringenden Handel zurück.

D.h. nach dem Schließen auf Take Profit, um den Zähler auf Null zu setzen.

Anfängliche Zählerstelle = 1

Alle Geschäfte, sowohl Käufe als auch Verkäufe, sollten gezählt werden.


Das Schließen eines Stop-Loss bedeutet nicht, dass der Handel Verluste macht, und umgekehrt. Es sei denn, die Stopps und Takes wurden bei der Eröffnung festgelegt und nicht mehr berührt.
Grund der Beschwerde: