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

 
alsu:

Nehmen Sie die Logik des Indikators vollständig auseinander.

Ersetzen Sie es zuerst.

unter

Auch,

Andernfalls wird zuerst der erste Block ausgeführt, dann der zweite. Mit einem anderen - entweder dem ersten oder dem zweiten.



ooo! logik scheint sonst zu fehlen!) ich werde es bald ändern! ja, und on the fly: wenn ich überall im text nicht mit der 4. sondern mit der 3. schreibe, etwa so:
iFractals(Symbol(),PERIOD_H1,MODE_UPPER,3);

Ich habe keinen Handel, obwohl die Balken zum 3. scheinen genug zu sein, damit alles funktioniert, was ist das Problem?

Und was die Logik des Indikators angeht, bin ich etwas verwirrt. Ich weiß, wie der Indikator funktioniert, ich brauche nur den Algorithmus, um sicherzustellen, dass ifractals nicht gleich Null ist, und Sie bieten mir an, diese Bedingung zu entfernen, ist es überflüssig? Warum schreibe ich es zweimal?

 
alsu:

Nehmen Sie die Logik des Indikators vollständig auseinander.

Ersetzen Sie es zuerst.

unter

Darüber hinaus,

Andernfalls wird zuerst der erste Block ausgeführt, dann der zweite. Mit einem anderen - entweder dem ersten oder dem zweiten.



Ich habe alles ersetzt, aber aus irgendeinem Grund springt es immer noch auf die gleiche Weise... ((((((
 
Vinin:

Es ist möglich, zu kämpfen, und die Arbeit des EA kann unterbrochen werden. Wir müssen nur den Ansatz ändern.


Wie?

Gehen Sie zu Beginn des Codes alle offenen Aufträge durch, suchen Sie nach Ticketwerten und weisen Sie diese den Aufträgen zu, oder gibt es eine andere Möglichkeit?

 
Cruc:


Gehen Sie zu Beginn des Codes alle offenen Aufträge durch, suchen Sie nach Ticketwerten und weisen Sie diese den Aufträgen zu, oder gibt es eine andere Möglichkeit?


Sie können dies tun, wenn der EA eine oder zwei Positionen eröffnet.
 
Wer weiß, was die Ursache dafür ist, dass der EA im Testprogramm nicht mehr funktioniert?
 
Vinin:

Sie können dies tun, solange der Berater eine oder zwei Positionen eröffnet.

Der EA ist mehrwährungsfähig, so dass einfache Operationen nicht immer sofort gelöst zu werden scheinen ((. Und es gibt keine Erfahrung.
 
Cruc:

Mein Expert Advisor ist mehrwährungsfähig, und einfache Operationen scheinen nicht immer auf einmal gelöst zu werden ((. Und es gibt keine Erfahrung.


Sie müssen die Aufträge nur korrekt protokollieren. Dafür gibt es viele Beispiele.

Und Erfahrung. Erfahrung kommt mit dem Gebiet. Sie wird nirgendwo hingehen.

 
Vinin:


Sie müssen nur darauf achten, dass die Bestellungen korrekt erfasst werden. Beispiele gibt es genug.

Und Erfahrung. Erfahrung kommt mit dem Gebiet. Sie wird nicht verschwinden.


Danke für die Antworten, ich werde in den Archiven wühlen.
 
skyjet:

Guten Abend, ich bitte um Hilfe bei einem MACD Expert Advisor für mehrere Währungen. Der EA befolgt die Kriterien für die Positionseröffnung korrekt, aber das Schließen "unter der Bedingung" funktioniert nicht. Ich habe zwar begonnen, einen Trailing-Stop zu verwenden, aber der korrekte Schlusskurs verschafft mir keine Pause.

So sieht der Hauptteil aus

Und dies ist ein enger Block. Bitte helfen Sie mir, den Fehler zu finden!


Entschuldigen Sie, dass ich mich wiederhole, aber so sehr ich mich auch bemühe, ich kann den Fehler nicht finden!

//+------------------------------------------------------------------+
string lSymbol;
int init ()
{ 
 lSymbol = Symbol();
 return (0);
}
int deinit()
{return(0);}
int start()
  {
   double MacdCurrent, MacdPrevious, SignalCurrent;
   double SignalPrevious, MaCurrent, MaPrevious;
   double bid, ask, point, digits;
   int cnt, ticket, total;
   
  total = SymbolOrdersTotal (lSymbol);
  
  if (total<1);
  {
    bid   = MarketInfo(lSymbol,MODE_BID);
    ask   = MarketInfo(lSymbol,MODE_ASK);
    point = MarketInfo(lSymbol,MODE_POINT);
    digits= MarketInfo(lSymbol,MODE_DIGITS);



Так выглядит оснавная часть, а это злопалучный блок закрытия



 for(cnt=0;cnt<total;cnt++)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()<=OP_SELL &&   // check for opened position 
         OrderSymbol()==lSymbol())  // check for symbol
        {
         if(OrderType()==OP_BUY)   // long position is opened
           {
            // should it be closed?
            if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious &&
               MacdCurrent>(MACDCloseLevel*point))
                {
                 OrderClose(OrderTicket(),OrderLots(),bid,3,Violet); // close position
                 return(0); // exit
                }
            // check for trailing stop
            if(TrailingStop>0)  
              {                 
               if(bid-OrderOpenPrice()>point*TrailingStop)
                 {
                  if(OrderStopLoss()<bid-point*TrailingStop)
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),bid-point*TrailingStop,OrderTakeProfit(),0,Green);
                     return(0);
                    }
                 }
              }
           }
         else // go to short position
           {
            // should it be closed?
            if(MacdCurrent<0 && MacdCurrent>SignalCurrent &&
               MacdPrevious<SignalPrevious && MathAbs(MacdCurrent)>(MACDCloseLevel*point))
              {
               OrderClose(OrderTicket(),OrderLots(),ask,3,Violet); // close position
               return(0); // exit
              }
            // check for trailing stop
            if(TrailingStop>0)  
              {                 
               if((OrderOpenPrice()-ask)>(point*TrailingStop))
                 {
                  if((OrderStopLoss()>(ask+point*TrailingStop)) || (OrderStopLoss()==0))
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),ask+point*TrailingStop,OrderTakeProfit(),0,Red);
                     return(0);
                    }
                }
              }
           }
        }
     }
   return(0);
  }
  
   
  int SymbolOrdersTotal(string lSymbol)
{
   int Res=0;
   int total=OrdersTotal();
   for (int i=0;i<total;i++) 
   {
      if (OrderSelect(i, SELECT_BY_POS))
      {
         if (OrderSymbol()==lSymbol)
         {
            Res++;
         }
      }
   }
   return(Res);
}
// the end.
 
Qwertee:
Ich habe alles ersetzt, aber aus irgendeinem Grund springt es immer noch auf die gleiche Weise... ((((((
schreiben Sie auf, was Sie erhalten und welche Meldungen Sie in das Protokoll ausgeben