Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 73

 

Wo steht die Positionsänderung geschrieben?

Angaben zu Stop Loss und Take Profit vor den Kauf- und Verkaufsbedingungen

   double Ask = SymbolInfoDouble(_Symbol,SYMBOL_ASK);            // лучшее предложение на покупку
   double Bid = SymbolInfoDouble(_Symbol,SYMBOL_BID);            // лучшее предложение на продажу
   double SL  = NormalizeDouble(StopLoss,_Digits);
   double TP  = NormalizeDouble(TakeProfit,_Digits);
                        
   bool Buy_Condition_1=...;
   bool Buy_Condition_2=...;
   bool Buy_Condition_3=...;
а сам
 bool PositionModify(const string _Symbol,const double SL,const double TP)
   {
      if(PositionSelect(_Symbol)==true) // есть открытая позиция
     {
      if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
         {
    Alert("SL!!!");
    return;    // закрыл 
         }
   MqlTradeRequest request={0};
   MqlTradeResult  result ={0};
        
       
   mrequest.action=TRADE_ACTION_SLTP;
   mrequest.symbol=_Symbol;
   mrequest.magic =EA_Magic; 
   mrequest.sl    =StopLoss;
   mrequest.tp    =TakeProfit;
   OrderSend(mrequest,mresult);
   if(mresult.retcode==10009 || mresult.retcode==10008) //запрос выполнен или ордер успешно помещен
           {
            Alert("Стопка прошла#:",mresult.order,"!!");
           }
         else
           {
            Alert("Стопка не прошла - код ошибки:",GetLastError());
            return(false);
           }
   return(true);
  }
//----------------------------------------------------------------- 
if(Buy_Close_1 || Buy_Close_2)
  
после отсылки ордера на покупку. Пока при компиляции борюсь с "лишними" скобками фигурными. Вопрос дубль 2 - правильно ли я расположил модификацию позиции? И вообще, "классический" ли он имеет код (при условии, что он верный)?
 
papaklass:

Es gibt einen Fehler im Code:

Ich danke Ihnen. Es ist weg.

Wie sieht es mit der Positionierung aus?

Die Sache ist, wenn ich geschweifte Klammern in Orten, bei der Kompilierung erzeugt es - 'PositionModify' - Funktion kann nur im globalen Bereich deklariert werden

und dieses Mal glaube ich es, d.h. die "Position Modifier" selbst sollte vor int OnInit() und Bedingungen (wenn) nach dem Kauf Abschnittplatziert werden ?

 
papaklass:

Geben Sie mir den Code, ich verstehe nicht, was Sie meinen.

PS: Sie sollten die Funktion PositionModify() auf globaler Ebene beschreiben, d. h. auf der Ebene, auf der sich die Funktionen befinden : OnInit(), OnTick(), OnDeinit().

Hier ist der Code. Er hat nur einen Stopp für den Kauf, da er auch einen Stopp für den Verkauf hat.
Dateien:
Aim.mq5  13 kb
 
papaklass:

Korrigiert. Er lässt sich ohne Fehler kompilieren. Ich habe es nicht mit dem Tester getestet. Ihr Code war nicht lesbar. Gewöhnen Sie sich an das Code-Layout wie in meiner korrigierten Version.

Danke (obwohl ich nicht ganz verstehe, was sich außer dem Layout geändert hat).

Was bedeutet "SMB" in Zeile 2 und wo ist es durch Werte definiert? Kann man nicht _Symbol schreiben?

  mrequest.action   = TRADE_ACTION_SLTP;
      mrequest.symbol   = smb;
      mrequest.magic    = EA_Magic; 
      mrequest.sl       = SL;
      mrequest.tp       = TP;
 

Hallo, können Sie mir sagen, ob die Aufträge auf den Signalen ausgeführt werden , wenn ich meinen Terminalcomputer ausgeschaltet habe?

 

Guten Tag,

Können Sie mir sagen, wie ich das Folgende am besten implementieren kann: Der Experte startet, wenn er initialisiert wird, zeichnet er (im Diagrammbereich? irgendwo anders?) z.B. eine Textbox und eine Schaltfläche. Der Experte verarbeitet Ticks. Wenn ein Benutzer Folgendes eingibt Wenn Sie einen Wert in die TextBox eingeben und die Taste drücken, sieht der Tick Handler diese neuen Daten.

Mit anderen Worten - was ist der richtige (einfachere, bessere) Weg, den interaktiven Austausch von Benutzerdaten mit dem Expert Advisor über Windows-GUI-Elemente zu organisieren? CChartObjectEdit und CChartObjectButton ist, entschuldigen Sie, eine Art von "Pornographie".


Ich danke Ihnen. Entschuldigen Sie, wenn die Frage einfach ist, und schauen Sie sich bitte um, wo die Antwort ist!

 
papaklass:

Cool.

1. Der Code lässt sich jetzt kompilieren. Erste Änderung.

Schade, dass Kompilieren und Betriebsfähigkeit nicht dasselbe sind)

input int StopLoss=60;      // Stop Loss
input int TakeProfit=200;   // Take Profit
//--- глобальные переменные
double MFI[];// массив MFI
double DEMA[];// массив DEMA

 bool PositionModify(const string smb,const double SL,const double TP)
  {       
      MqlTradeRequest mrequest={0};
      MqlTradeResult  mresult ={0};
      
      mrequest.action   = TRADE_ACTION_SLTP;
      mrequest.symbol   = smb;
      mrequest.sl       = SL;
      mrequest.tp       = TP;
      
      OrderSend( mrequest, mresult );
      if( mresult.retcode == 10009 || mresult.retcode == 10008 )//запрос выполнен или ордер успешно помещен
      {          
         Alert( "Стопка прошла#:", mresult.order, "!!" );
      }
      else
      {
         Alert( "Стопка не прошла - код ошибки:", GetLastError() );
         return( false );
      }   
   return( true );
  }
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
  {
MFIHandle=iMFI(NULL,0,MFIPeriod,VolumeType);
DEMAHandle=iDEMA(NULL,0,PeriodDEMA,ShiftDEMA,MFIHandle);
if(BolBandsHandle<0 || MFIHandle<0 || DEMAHandle<0)
     {
      Alert("Ошибка при создании индикаторов - номер ошибки: ",GetLastError(),"!!");
      return(-1);
     }
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
 //+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
 ...
   double Ask = SymbolInfoDouble(_Symbol,SYMBOL_ASK);            // лучшее предложение на покупку
   double Bid = SymbolInfoDouble(_Symbol,SYMBOL_BID);            // лучшее предложение на продажу
   double SL   = NormalizeDouble(PositionGetDouble(POSITION_SL),4);
   double TP   = NormalizeDouble(PositionGetDouble(POSITION_TP),4);
                        
   bool Buy_Condition_1
   
   bool Buy_Close_1=
   bool Sell_Condition_1=
   
   bool Sell_Close_1=
   
 if(Buy_Condition_1 || Buy_Condition_2)
     { 
       if(Buy_Condition_3 && Buy_Condition_4)
        {
         // есть ли в данный момент открытая позиция на покупку?
         if(Buy_opened)
           {
            Alert("Позиция на покупку имеется");
            return;    // не добавлять к открытой позиции на покупку
           }        
         mrequest.action = TRADE_ACTION_DEAL;    // немедленное исполнение
         mrequest.symbol = _Symbol;              // символ
         mrequest.magic = EA_Magic;              // Magic Number
         mrequest.volume = Lot;                  // количество лотов для торговли
         mrequest.type = ORDER_TYPE_BUY;         // ордер на покупку
         mrequest.type_filling = ORDER_FILLING_FOK;   // тип исполнения ордера - все или ничего

         //--- отсылаем ордер
         OrderSend(mrequest,mresult);
         
         
         
 //------------------------------------------------------------------------------
         PositionModify(Symbol(),NormalizeDouble(Bid - SL*_Point,4),TP*_Point);
 //-------------------------------------------------------------------------------
 
 
 
 
         // анализируем код возврата торгового сервера
         if(mresult.retcode==10009 || mresult.retcode==10008) //запрос выполнен или ордер успешно помещен
           {
            Alert("Buy успешно помещен, тикет ордера #:",mresult.order,"!!");
           }
         else
           {
            Alert("Запрос на установку ордера Buy не выполнен - код ошибки:",GetLastError());
            return;
           }
        }
      } 

if(Buy_Close_1 || Buy_Close_2)
     {
      if(Buy_Close_3)
        {
        // есть ли в данный момент открытая позиция на покупку?
          if(PositionSelect(_Symbol)==true) // есть открытая позиция
           {
            if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
                {
           Alert("Закрываю ордер BUY!!!");                  
                                  
         mrequest.action = TRADE_ACTION_DEAL; // немедленное исполнение
         mrequest.symbol = _Symbol;           // символ
         mrequest.magic = EA_Magic;           // Magic Number
         mrequest.volume = Lot;               // количество лотов для торговли
         mrequest.type = ORDER_TYPE_SELL; // ордер на продажу      
         mrequest.type_filling = ORDER_FILLING_FOK; // тип исполнения ордера - все или ничего
         //--- отсылаем ордер
         OrderSend(mrequest,mresult);
         // анализируем код возврата торгового сервера
         if(mresult.retcode==10009 || mresult.retcode==10008) //запрос выполнен или ордер успешно помещен
           {
            Alert("тикет закрытия Buy #:",mresult.order,"!!");
           }
         else
           {
            Alert("Запрос на установку ордера закрытия Buy не выполнен - код ошибки:",GetLastError());
            return;
           }
        }
      }
    }
  }
 ...
     return; 
}//+------------------------------------------------------------------+end PositionModify
 

Warum setzt der Code im Tester Stoplosses und Profits, aber nicht im Chart?!

Ich fange langsam an auszuflippen)))

 
Lester:

Warum setzt der Code im Tester Stoplosses und Profits, aber nicht im Chart?!

Ich werde langsam wütend))).

Lester:Zdes legte eine Vorlage, im Inneren gibt es eine Änderung, und zeigte, wie man polzuvatsya.

https://www.mql5.com/ru/forum/6343/page73

Wenn Sie das nicht tun wollen, müssen Sie die Variablen richtig lesen.

Стоплос и тейкпрофит в пункти.*Понт = 0.002-ето тейк,ну надо и к добавит.

PositionModify(Symbol(),NormalizeDouble(Bid - SL*_Point,4),TP*_Point);

PositionModify(Symbol(),NormalizeDouble((Bid - SL*_Point),4),NormalizeDouble((Bid + TP*_Point),4));

 
Chino:

Hallo, können Sie mir sagen, ob die Signalaufträge ausgeführt werden, wenn ich meinen Terminalcomputer ausgeschaltet habe?

Die Entwickler haben eine solche Möglichkeit versprochen. Noch nicht.