MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 1672

 
Nerd Trader # :

Fazlalık kod kaldırıldı.

Zaten tamamen umutsuzum, OnTick'e gönderildiği anda değişkenin bir baskısını bile ekledim ... ve eğer yardımcı olduysa :) OnTick'te her zaman yanlıştır


 bool BESet( double sl = 0 , color arrow_color = 0 , string order_type = "" ){
   bool order = OrderModify( OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0 , arrow_color );
           if (!order) {
             ResetLastError ();
             Print ( "!Ошибка " ,order_type, ". Причина: " , GetLastError ());
             return false ;
          }
           else {
             return true ;
          }
}

bool BEActivate(){
   double unrealized_profit = 0 ;
   color arrow_color = 0 ;
   string order_type = "" ;
   double sl = 0 ;
   bool is_be = false ; // если объявить true, то в OnTick всегда будет возвращаться true

   if ( OrdersTotal () >= 1 ){
     for ( int i = OrdersTotal () - 1 ; i >= 0 ; i--){
       if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == false ) continue ;
       if (OrderType() == OP_BUY){
         if (OrderStopLoss() > OrderOpenPrice()) continue ;
        unrealized_profit = NormalizeDouble ( MathAbs (OrderOpenPrice() - Ask)/ Point , 0 );
         if (unrealized_profit >= save_zone && Ask > OrderOpenPrice()){
          is_be = BESet( NormalizeDouble (OrderOpenPrice()+breakeven* Point , Digits ), clrGreenYellow , "Бай" );
           Print ( "BE " ,is_be);
        }
      }
       if (OrderType() == OP_SELL){
        ...
        ...
      }
    }
  }
     if (!is_be){
     Print ( "is_be return " ,is_be);
     return false ;
  }
   else {
     Print ( "is_be return " ,is_be);
     return true ;
  }
}

void OnTick ()
{
  
   bool is_be = BEActivate();

   if (last_time > bar.time_open){
    bar.Initialize();
     Print ( "is_be " ,is_be); //Всегда FALSE
    ...
  }
last_time = iTime(NULL, 0, 0);
}
 
MakarFX # :

Bu ne anlama geliyor?

Göstergenin entegrasyonunu bir Uzman Danışmana uygulama konusundaki deneyimlerini paylaşabilecek birini arıyorum.

Bu verileri farklı TF'lerde hesaplayabilmek.

 const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],

Birinin bir sınıf aracılığıyla bir uygulaması olup olmadığını merak ediyorum.

Şu an derslerin mantığını çözmeye çalışıyorum, öğrenmem için yardımcı olur.

 
законопослушный гражданин # :

Tünaydın. sorunu çözmeye yardımcı olun. M15 mumunda arka arkaya birkaç anlaşma açılır.

Birden fazla işlemin açılmaması gerekmektedir. Danışmanın mantığı, bir önceki sipariş kapanana kadar bir sonraki açılmayacak şekilde düzenlenmiştir, ancak bazen bu kadar uzun bir mum üzerinde bir dizi işlem açılır. Bu durumu önlemek için koda ne eklenmeli?

kod parçacığı:

bCheckOrders() içinde, yalnızca açık değil, aynı zamanda bekleyen siparişleri de (MODE_TRADES) yineler.
 
Nerd Trader # :

Um... iOTi'de vOrderModify()'da her zaman = 1, bir bilet yoktur, ancak OrderSend() işleminin olumlu bir sonucu, yani "1" değeri vardır.


teşekkür etmek. Orijinal kod benim değil, bu yüzden gereksiz hiçbir şeyi değiştirmiyorum. Çalışır ve çalışır.

Bu benim sorunumu nasıl çözecek?

 
законопослушный гражданин # :

Tünaydın. sorunu çözmeye yardımcı olun. M15 mumunda arka arkaya birkaç anlaşma açılır.

Birden fazla işlemin açılmaması gerekmektedir. Danışmanın mantığı, bir önceki sipariş kapanana kadar bir sonraki açılmayacak şekilde düzenlenmiştir, ancak bazen bu kadar uzun bir mum üzerinde bir dizi işlem açılır. Bu durumu önlemek için koda ne eklenmeli?

kod parçacığı:

OnTick'i Göster()
 
Mikhail Toptunov # :
Göstergenin entegrasyonunu bir Uzman Danışmana uygulama konusundaki deneyimlerini paylaşabilecek birini arıyorum.

Bu verileri farklı TF'lerde hesaplayabilmek.

Birinin bir sınıf aracılığıyla bir uygulaması olup olmadığını merak ediyorum.

Şu an derslerin mantığını çözmeye çalışıyorum, öğrenmem için yardımcı olur.

rates_total = Bars
time[]      = Time[]
open[]      = Open[]
high[]      = High[]
low[]       = Low[]
close[]     = Close[]
 
MakarFX # :
OnTick'i Göster()
 void OnTick ()
  {
// Получим значение индикатора
   dMA = iMA ( Symbol (), 0 ,PeriodMA, MovingShift, MODE_SMA , PRICE_CLOSE , 0 ); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0.

// Если нет открытых ордеров, то входим в условие
   if (bCheckOrders() == true )
     {
// Если появился сигнал на покупку, то откроем ордер на покупку
       if (bSignalBuy() == true )
         vOrderOpenBuy();

// Если появился сигнал на продажу, то откроем ордер на продажу
       if (bSignalSell() == true )
         vOrderOpenSell();
     }
// Проверяем, вышел ли текущий баланс по открытому ордеру за вилку из внешних переменных CountLoss и CountProfit

   if (GetProfitFromStart()>CountProfit || GetProfitFromStart()<CountLoss*- 1 )
     {
// Если да, то закроем ордер по текущей цене, не дожидаясь стопа или тейка
      CloseOrder();
     }
DrawLABEL( "lab_Take" , 1 , 5 , 0 ,Color(GetProfitFromStart()> 0 ,Lime,Red), StringConcatenate ( "Profit: " ,DoubleToStr(GetProfitFromStart(), 2 ),AC));
  }
 
законопослушный гражданин # :

teşekkür etmek. Orijinal kod benim değil, bu yüzden gereksiz hiçbir şeyi değiştirmiyorum. Çalışır ve çalışır.

Bu, sorunumu çözmeye nasıl yardımcı olacak?

Hayır, bir hata yaptım, OrderSend() bir bilet veya -1 döndürür, bu yüzden her şey yolunda.
 
законопослушный гражданин # :

Bunu deneyin, bCheckOrders() öğesini OnTick() öğesinden kaldırın ve vurgulanmış olarak ayarlayın.

 void OnTick ()
  {
// Получим значение индикатора
   dMA = iMA ( Symbol (), 0 ,PeriodMA, MovingShift, MODE_SMA , PRICE_CLOSE , 0 ); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0.

// Если появился сигнал на покупку, то откроем ордер на покупку
       if (bSignalBuy() == true )
         vOrderOpenBuy();

// Если появился сигнал на продажу, то откроем ордер на продажу
       if (bSignalSell() == true )
         vOrderOpenSell();
// Проверяем, вышел ли текущий баланс по открытому ордеру за вилку из внешних переменных CountLoss и CountProfit

   if (GetProfitFromStart()>CountProfit || GetProfitFromStart()<CountLoss*- 1 )
     {
// Если да, то закроем ордер по текущей цене, не дожидаясь стопа или тейка
      CloseOrder();
     }
DrawLABEL( "lab_Take" , 1 , 5 , 0 ,Color(GetProfitFromStart()> 0 ,Lime,Red), StringConcatenate ( "Profit: " ,DoubleToStr(GetProfitFromStart(), 2 ),AC));
  }
//+-----------------------------------------------------------------------------------------------+
//|                                                            Функция открытия ордера на покупку |
//+-----------------------------------------------------------------------------------------------+
void vOrderOpenBuy()
  {
// Если нет открытых ордеров, то входим в условие
   if (bCheckOrders() == true )
     {
   // Тикет ордера
       int iOTi = 0 ;   
   
      iOTi = OrderSend ( Symbol (), OP_BUY, LOT(), Ask, Slippage, 0 , 0 , "" , Magic, 0 , clrNONE );
   
   // Проверим открылся ли ордер
       if (iOTi > 0 )
   // Есди да, то выставим уровни убытка и прибыли
         vOrderModify(iOTi);
       else
   // Если нет, то получим ошибку
      vError( GetLastError ());
     }
  }
//+-----------------------------------------------------------------------------------------------+
//|                                                            Функция открытия ордера на продажу |
//+-----------------------------------------------------------------------------------------------+
void vOrderOpenSell()
  {
// Если нет открытых ордеров, то входим в условие
   if (bCheckOrders() == true )
     {
   // Тикет ордера  
       int iOTi = 0 ;   
   
      iOTi = OrderSend ( Symbol (), OP_SELL, LOT(), Bid, Slippage, 0 , 0 , "" , Magic, 0 , clrNONE );
   
   // Проверим открылся ли ордер
       if (iOTi > 0 )
   // Есди да, то выставим уровни убытка и прибыли
         vOrderModify(iOTi);
       else
   // Если нет, то получим ошибку
      vError( GetLastError ());
     }
  }
 
Nerd Trader # :
Hayır, bir hata yaptım, OrderSend() bir bilet veya -1 döndürür, bu yüzden her şey yolunda.

kuyu.

gelecek için çalışacağım