Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 1420

 
Rustam Ayupov ticaret terminalindeki takip eden stop kayıplarımın gereksiz yönetimi beni şaşırttı. Takip eden stop ayarı ile manuel olarak işlem yapıyorum ve MetaQuotes ticaret terminali ile tanıştığımda, demo hesabında, diğer brokerlerle uzun süredir çalışılan ticaret sistemim, işlemleri bağımsız olarak kapatmaya başladı.... hepsi rastgele sırayla, düzenlilik yok. Ticaret sunucusu yavaşladığında, teklif atlamalarını hayal ederek parametrelerin üzerinden çoktan geçtim. Pusuda beklemek, takip eden stoploss'un böyle planlanmamış bir kapanışını beklemek de işe yaramıyor, canavar benden daha kurnazdı) Daha deneyimli tüccarlardan biri, bu tanıdık geliyorsa, lütfen aydınlatın? Ya da ne olabileceğini önerin? MT5 ile çok fazla broker yok ve sistemin kendisi MT4 ile karşılaştırılamaz, MT5 ticaret terminalinde ve bu brokerde ustalaşmak istiyorum. TEŞEKKÜRLER .

3. DLL'yi yasaklayın ve anlamadığınız tüm göstergeleri ve danışmanları kaldırın.

2. Kişisel dolap DC'de, tüm gruplardan, sinyallerden, danışmanlardan ve benzer her şeyden bağlantıyı kesin.

1. İşlem hesabı şifrelerinizi değiştirin

 

Bir CButton nesnesi için OnSetColorBackground kullanmanın doğru yolu nedir? Koşullara bağlı olarak OnTick'ten düğmeyi renklendirmem gerekiyor. Düğmeye tıklanması beklenmiyor.

"Renklendirme" fonksiyonunu şu şekilde bildiriyorum ve kullanıyorum:


public:
bool              OnSetClrButtonMA(void);

---------------

bool CControlsDialog::OnSetClrButtonMA(void)
  {
   if(CL>MA)
      m_button_MA.ColorBackground(colBtn_Pos);
   else
      m_button_MA.ColorBackground(colBtn_Neg);
     return(true);
  }

void OnTick{
................

	 OnSetClrButtonMA();

}

Bunun kodda uygulandığı bir örnek var mı? Kütüphanede bulamadım.

Документация по MQL5: Стандартная библиотека / Панели и диалоги / CButton / OnSetColorBackground
Документация по MQL5: Стандартная библиотека / Панели и диалоги / CButton / OnSetColorBackground
  • www.mql5.com
OnSetColorBackground - CButton - Панели и диалоги - Стандартная библиотека - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

Merhaba!

Zararı durdurma komut dosyasının neden çalışmadığını ve 4756 hatası verdiğini söyleyebilir misiniz?

Aynı zamanda, kar alma işlemini değiştirmek için aynı komut dosyası iyi çalışıyor.

//+------------------------------------------------------------------+
//|                                                    Modify SL.mq5 |
//|                                                                  |
//+------------------------------------------------------------------+
#property description "Скрипт"
#property script_show_inputs
input  int Magic_Number = 0;
input double Price_of_New_Stop_Loss = 0.0;
//--------------------------------------------------------------------
MqlTick tick;
MqlTradeRequest request;
MqlTradeResult result;
MqlTradeCheckResult check;
MqlDateTime tm;
//--------------------------------------------------------------------
void OnStart()
{  
   double Position_SL;
   ulong  Position_Magic = 0;
   for(int i=0; i<PositionsTotal(); i++)
   {
      if(_Symbol == PositionGetSymbol(i))
      {
         Position_Magic = PositionGetInteger(POSITION_MAGIC);
         if(Position_Magic == Magic_Number)
         {
            ZeroMemory(request);
            ZeroMemory(result);
            request.position = PositionGetInteger(POSITION_TICKET);
            Position_SL = PositionGetDouble(POSITION_SL);

            if (Position_SL != Price_of_New_Stop_Loss)
            {
               request.action = TRADE_ACTION_SLTP;
               request.sl = NormalizeDouble(Price_of_New_Stop_Loss,_Digits);
               Print(TimeToString(TimeCurrent()), " Modify ", request.position,
                     " with Position_Magic ", IntegerToString(Position_Magic));
               Print("  SL ", DoubleToString(Position_SL,_Digits),
                     " -> ", DoubleToString(request.sl,_Digits));
               if(!OrderSend(request,result)) Print("error ",GetLastError());
            }
         }
      }  
   }
   //--- cycle until the script is not halted
   while(!IsStopped()) Comment("Сделано");
   Comment("");
}
// End OnStart()
//+------------------------------------------------------------------+
 
Transslator #:

Merhaba!

Zarar durdurmayı değiştirme komut dosyasının neden çalışmadığını ve 4756 hatası verdiğini söyleyebilir misiniz?

Aynı zamanda, kar alma işlemini değiştirmek için aynı komut dosyası iyi çalışıyor.

Kılavuzda bu konuyla ilgili iyi bir örnek bulunmaktadır

         request.action  =TRADE_ACTION_SLTP; // тип торговой операции
         request.position=position_ticket;   // тикет позиции
         request.symbol=position_symbol;     // символ 
         request.sl      =sl;                // Stop Loss позиции
         request.tp      =tp;                // Take Profit позиции
         request.magic=EXPERT_MAGIC;         // MagicNumber позиции

Bir ticaret talebinin yapısı

SL & TP Değişikliği

StopLoss ve/veya TakeProfit seviyelerinin değiştirilmesi için işlem emri. 4 alanın belirtilmesini gerektirir:

  • eylem
  • sembolü
  • sl
  • tp
  • pozisyon

Riskten korunma sisteminde bir pozisyonu değiştirirken veya kapatırken, biletini (MqlTradeRequest::position) belirttiğinizden emin olun. Netleştirme sisteminde bilet de belirtilebilir, ancak pozisyon sembol adıyla tanımlanır.


https://www.mql5.com/ru/docs/constants/structures/mqltraderequest

Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура торгового запроса
Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура торгового запроса
  • www.mql5.com
Структура торгового запроса - Структуры данных - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
2022.08.31 13:15:39.943 2012.01.08 23:24:00   failed market sell 0.2 EURJPY [Market closed]
Pazarın kapalı olmadığını nasıl kontrol edeceğimi söyleyebilir misiniz?
 
Vladimir Deryagin #:

El kitabında bu konuyla ilgili güzel bir örnek var

Bir hedging sisteminde bir pozisyonu değiştirirken veya kapatırken, biletini (MqlTradeRequest::position) belirttiğinizden emin olun. Netleştirme sisteminde, bilet de belirtilebilir, ancak pozisyon sembol adıyla tanımlanır.


https://www.mql5.com/ru/docs/constants/structures/mqltraderequest

Cevap için teşekkürler!

Senaryoyu bu şekilde yeniden düzenledim:

//+------------------------------------------------------------------+
//|                                                 Modify SL TP.mq5 |
//|                                                                  |
//+------------------------------------------------------------------+
#property description "Скрипт"
#property script_show_inputs
input  int Magic_Number = 0;
input double Price_of_New_Take_Profit = 0.0;
input double Price_of_New_Stop_Loss = 0.0;
//--------------------------------------------------------------------
//--- объявление запроса и результата
//MqlTick tick;
MqlTradeRequest request;
MqlTradeResult result;
//MqlTradeCheckResult check;
//MqlDateTime tm;
//--------------------------------------------------------------------
void OnStart()
{  
//   double Position_SL,Position_TP;
//   ulong  Position_Magic = 0;
   //--- перебор всех открытых позиций
   for(int i=0; i<PositionsTotal(); i++)
   {
      if(_Symbol == PositionGetSymbol(i))
      {
         //--- параметры ордера
         ulong  Position_Ticket = PositionGetTicket(i);// тикет позиции
         string Position_Symbol = PositionGetString(POSITION_SYMBOL); // символ 
         int    Symbol_Digits = (int)SymbolInfoInteger(Position_Symbol,SYMBOL_DIGITS); // количество знаков после запятой
         ulong  Position_Magic = PositionGetInteger(POSITION_MAGIC); // MagicNumber позиции
         double Position_Volume = PositionGetDouble(POSITION_VOLUME);    // объем позиции
         double Position_SL = PositionGetDouble(POSITION_SL);  // Stop Loss позиции
         double Position_TP = PositionGetDouble(POSITION_TP);  // Take Profit позиции
         ENUM_POSITION_TYPE Position_Type=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);  // тип позици   
         if(Position_Magic == Magic_Number)
         {
            if (Position_SL != Price_of_New_Stop_Loss || Position_TP != Price_of_New_Take_Profit)
            {
               //--- обнуление значений запроса и результата
               ZeroMemory(request);
               ZeroMemory(result);
               //--- установка параметров операции
               request.action   = TRADE_ACTION_SLTP; // тип торговой операции
               request.position = Position_Ticket;   // тикет позиции
               request.symbol   = Position_Symbol;     // символ 
               request.sl       = NormalizeDouble(Price_of_New_Stop_Loss,_Digits); // Stop Loss позиции
               request.tp       = NormalizeDouble(Price_of_New_Take_Profit,_Digits); // Take Profit позиции
               request.magic    = Position_Magic;         // MagicNumber позиции
               //--- вывод информации о модификации
               Print(TimeToString(TimeCurrent()), " Modify ", request.position,
                     " with Position_Magic ", IntegerToString(Position_Magic));
               Print("  SL ", DoubleToString(Position_SL,_Digits), " -> ", DoubleToString(request.sl,_Digits),
                     ";  TP ", DoubleToString(Position_TP,_Digits), " -> ", request.tp);
               //--- отправка запроса и вывод информации об ошибке, если отправить запрос не удалось
               if(!OrderSend(request,result)) PrintFormat("OrderSend error %d",GetLastError());
               //--- информация об операции   
               PrintFormat("retcode=%u  deal=%I64u  order=%I64u", result.retcode, result.deal, result.order);
            }
         }
      }  
   }
   //--- Цикл, пока скрипт не будет прерван
   while(!IsStopped()) Comment("Сделано");
   Comment("");
}
// End OnStart()
//+------------------------------------------------------------------+

Kar almak iyi değişir. Ancak zararı durdurma değerini açıkça ayarlanmış bir değerle değiştirmeye çalışırken, 4756 hatası üretilir ve günlükte şu şekildedir:


 
Transslator #:

Kar almak mükemmel şekilde değişir. Ancak zararı durdurma değerini açıkça ayarlanmış bir değerle değiştirmeye çalışırken, 4756 hatası üretilir ve günlükte şu şekildedir:


Şu anda Satış fiyatı neye eşittir?
 
Sergey Gridnev #:
Şu anda Ask fiyatı neye eşittir?
Pozisyon 0,85098 fiyatından açık. Diğer çiftlerde ve durağa farklı mesafelerde aynı hikaye.
 
Transslator #:
Pozisyon 0,85098 fiyatından açılmıştır. Aynı hikaye diğer çiftler için ve stopa farklı mesafeler için de geçerlidir.
Pozisyonun hangi fiyattan açıldığı önemli değildir, stop modifikasyonu anındaki fiyat önemlidir. Bir satış pozisyonu için bu, Satış fiyatıdır.
 
Sergey Gridnev #:
Pozisyonun hangi fiyattan açıldığı önemli değildir, önemli olan stop modifikasyonu anındaki fiyattır. Bir satış pozisyonu için bu, Satış fiyatıdır.
Bu forex, mevcut fiyat sürekli değişiyor, ancak açıkça yerleştirilen duraktan çok uzakta.