Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 698

 
Vitaly Muzichenko:

Bis Sie es leid sind, sie zu schreiben

ernsthaft?))
 
multiplicator:
ernsthaft?))

Ja. Aber in der Regel schreibt man nicht mehr als drei, denn solcher Code ist später schwer zu lesen, vor allem, wenn viel Zeit vergangen ist, seit er geschrieben wurde. Es ist besser, diese vielen verschachtelten ifs in separate Funktionen aufzuteilen. Oder verwenden Sie den Schalterbediener ... Fall

 
Artyom Trishkin:
MessageBox()

Gibt es eine Möglichkeit, dass, wenn ich nach dem Eintreffen eines neuen Häkchens klicke, kein neues Fenster erscheint, sondern die Werte des ersten Fensters verwendet werden?

void OnTick()
  {
 if (Orders()<1 && (1==message || !use_MessageBox)){
   ticket=OrderSend(Symbol(), OP_SELL, lot, Bid, slippage, Ask+stopLoss*Point, Bid-takeProfit*Point, "", magic, 0, Red); message=0; 
 } 
 if (Orders()<1 && (message==0 || message==2) && use_MessageBox){
 if(use_PlaySound) PlaySound ("tick");
 message=-2;
 message =MessageBox("Текст, содержащий сообщение для отображения", "Необязательный текст для отображения в заголовке", IDOK);
   }
if (Orders()<1 && (1==message || !use_MessageBox)){
   ticket=OrderSend(Symbol(), OP_SELL, lot, Bid, slippage, Ask+stopLoss*Point, Bid-takeProfit*Point, "", magic, 0, Red); message=0; 
 }

}
 
void Trailing()
{
   for (int i=OrdersTotal() - 1; i>=0; i--)
   {
      if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES))
      {
         if (OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol())
         {
            if (OrderType() == OP_BUY)
            {
               if (Bid - OrderOpenPrice() > TrailingStop*Point)
               {
                  if (OrderStopLoss() < Bid-Point*(TrailingStop+TrailingStep) || OrderStopLoss() == 0)
                  {
                     if (!OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-Point*TrailingStop,Digits),OrderTakeProfit(),0,Blue))
                        Print("error order modify");
                  }
               }
            }
         }
      }
   }
   
   if (OrderType() == OP_SELL)
   {
      if (OrderOpenPrice() - Ask > TrailingStop*Point)
      {
         if (OrderStopLoss() > Ask + Point * (TrailingStop+TrailingStep) || OrderStopLoss() == 0 )
         {
            if (!OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+Point*TrailingStop,Digits),OrderTakeProfit(),0,Red))
               Print("error order modify");
         }
      }
   }
}
//--------------------------------------------------------

Guten Tag, in Tests Trailing funktioniert wie erwartet, aber im wirklichen Leben nicht, oder nur einmal in eine Weile, von Zeit zu Zeit Spams mit Fehler OrderModify Fehler 4108, ich kann nicht verstehen, was falsch ist, bitte korrigieren Sie es, ich verstehe, dass die EA nicht richtig wählen Aufträge für die Änderung.

Ich möchte meinen EA beschreiben:

Wenn sich zwei MAs kreuzen, eröffnen Sie 2 Positionen, eine Short- und eine Long-Position durch Magie. Der kurze schließt entweder bei Takei oder bei der MA-Kreuzung, der lange sollte schleppend fahren. Die Auswahl einer langen Position für ein Schleppnetz erfolgt nach der magischen Zahl.

Vielleicht habe ich einen Fehler in einem Teil des Codes beim Öffnen der Position gemacht:

//BUY
   if (fast1>slow1&&fast2<slow2)
     {
      if (StopLoss_1>0)   sl=NormalizeDouble(Bid-StopLoss_1*Point,Digits);   else sl=0;
      if (TakeProfit_1>0) tp=NormalizeDouble(Ask+TakeProfit_1*Point,Digits); else tp=0;
      closeshrts();
      OrderSend(Symbol(),OP_BUY,Lts,NormalizeDouble(Ask,Digits),5,sl,tp,NULL,0,0,Blue);
     }
   //BUY_2
   if (fast1>slow1&&fast2<slow2)  
     {
      if (StopLoss_2>0)   sl=NormalizeDouble(Bid-StopLoss_2*Point,Digits);   else sl=0;
      if (TakeProfit_2>0) tp=NormalizeDouble(Ask+TakeProfit_2*Point,Digits); else tp=0; 
      closeshrts();
      OrderSend(Symbol(),OP_BUY,Lts,NormalizeDouble(Ask,Digits),5,sl,tp,NULL,MagicNumber,0,Blue);
     }  
     
   //SELL
   if(fast1<slow1&&fast2>slow2)
     {
      if (TakeProfit_1>0) sl=NormalizeDouble(Ask+StopLoss_1*Point,Digits);   else sl=0;
      if (StopLoss_1>0)   tp=NormalizeDouble(Bid-TakeProfit_1*Point,Digits); else tp=0;
      closelongs();
      OrderSend(Symbol(),OP_SELL,Lts,NormalizeDouble(Bid,Digits),5,sl,tp,NULL,0,0,Red);
     }
   //SELL_2
   if(fast1<slow1&&fast2>slow2)
     {
      if (TakeProfit_2>0) sl=NormalizeDouble(Ask+StopLoss_2*Point,Digits);   else sl=0;
      if (StopLoss_2>0)   tp=NormalizeDouble(Bid-TakeProfit_2*Point,Digits); else tp=0;
      closelongs();
      OrderSend(Symbol(),OP_SELL,Lts,NormalizeDouble(Bid,Digits),5,sl,tp,NULL,MagicNumber,0,Red);
     } 

Ich weiß nicht, vielleicht sollte ich Orders über eine Schleife öffnen? Und wie schreibe ich diesen Code richtig, damit die richtigen Stops und Take Profits gesetzt werden? So wie ich ihn geschrieben habe, funktioniert er nur für Sell, für Buy setzt er Stop auf 0.

(Bitte helfen Sie mir auf die richtige Spur))

 
Hallo, ein Freund von mir hat mir eine Frage über das MQL4-Alphabet gestellt:
Sind die kyrillisch-russischen Buchstaben im Alphabet enthalten?
Und das Fragezeichen ???? gehört zum Zeichenvorrat des Alphabets?????
und der Backslash \\\\\\\, ist er Teil des Alphabets oder nicht?
 
ein.
 
Alexander Zhmurenko:
) eintritt.

Was ich geschrieben habe, war ein Zitat von einem Bekannten. Ich habe es einfach kopiert und eingefügt. Er versucht, mir MQL beizubringen. Ich zerbreche mir den Kopf, also schreiben Sie bitte auf, was da rein gehört.

a ) Fragezeichen ( ?)

b) Backslash (\ )

 
Zvezdochet:

Was ich geschrieben habe, war ein Zitat von einem Bekannten. Ich habe es einfach kopiert und eingefügt. Er versucht, mir MQL beizubringen. Ich zerbreche mir den Kopf, also schreiben Sie bitte auf, was da rein gehört.

a ) ein Fragezeichen ( ?)

b ) Backslash ( \ )

Die Verwendung kyrillischer Zeichen ist ein undokumentiertes Merkmal

Folgende Zeichen können in einer ID verwendet werden: Ziffern 0-9, Klein- und Großbuchstaben a-z und A-Z, die als unterschiedliche Zeichen erkennbar sind, Unterstrich (_). Das erste Zeichen darf keine Zahl sein.

Syntax.

 
int OnInit()
  {
//---
   color желтый = clrAqua;
//---
   return(INIT_SUCCEEDED);
  }
können die Variablen auch sein
 

Hallo, könnten Sie mir bitte sagen, warum ZigD[0] nicht in sommente ausgegeben wird?

   for(ww = 0; ww <= Bars-1; ww++)
  {
      zzz = iCustom(NULL, 0, "ZigZag", ExtDepth, ExtDeviation, ExtBackstep, 0, ww);
      
           if(zzz > 0.0)   
           {
           ZigM[kk]=zzz;
            kk++; 
           ZigD[dd]=ww;
            dd++;  
            }
   }