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

 
ksbr :
Kendi hissemi test etmek için MT5'e bir hisse senedi (gelecek) koymak istiyorum, nasıl?
imkanı yok. bu geleceğe sahip DC'yi arayın
 
sergeev :
imkanı yok. bu geleceğe sahip DC'yi arayın

%)))) Bu geleceğin DC'si yok))) Yapıştırılmalı...

Yazık, yazık ama her şey çok güzel başladı...

 

Hepiniz hoşgeldiniz!

İnsanlara yardım edin, birkaç gündür danışmanda iki işlevi uygulamaya çalışıyorum: ilki son işlemin kârını, ikincisi son işlemin lotunu belirler.

Bu site, makalelerdeki ve diğer danışmanlardaki örnekleri izleyerek çeşitli işlevler yaptı, ancak sonuç yok - her iki işlev de her zaman 0,00 değerini verir.

İşte doğru seçeneğe en yakın olduğunu düşündüğüm şey, ancak sonuç her zaman 0:

 double LossLastPos(){
// --- определение границ требуемой торговой истории
   datetime end= TimeCurrent ();                 // текущее серверное время
   datetime start=end- PeriodSeconds ( PERIOD_D1 ); // установим начало на сутки назад
//--- запросим в кэш программы торговую историю за день
   HistorySelect (start,end);
//--- получим количество ордеров в истории
   int history_orders= HistoryOrdersTotal ();
//--- получим тикет ордера из истории, имеющего последний индекс в списке
   ulong order_ticket= HistoryOrderGetTicket (history_orders- 1 );
   if (order_ticket> 0 ) // получили в кэш исторический ордер, работаем с ним
     {
       //Получаем значение прибыли последнего ордера
       double   profit = HistoryDealGetDouble (order_ticket, DEAL_PROFIT );
       return (profit);
     }
}

Aynı şekilde parti büyüklüğünü elde etmeye çalışıyorum:

 double   volume = HistoryDealGetDouble (order_ticket, DEAL_VOLUME );
       return (volume);

Ve hiçbir şey olmuyor, değerler her zaman sıfır.

Ben kendim, mql4'ten mql5'e ve mql4'e geçiyorum, bu tür işlevlerin uygulanması herhangi bir zorluk yaratmadı, ancak burada bir çıkmazdasınız.

Lütfen bana gerçek, çalışan bir çözüm söyleyin.

 
karakos :

...

Lütfen bana gerçek, çalışan bir çözüm söyleyin.

HistoryDealGetTicket () ve HistoryDealsTotal () kullanın.

Ve kontrol edin:

   if ( HistorySelect (start,end))
     {
       // ...
     }
 

tol64 çok teşekkür ederim! Her şey çalıştı.

%100 çalışan bir çözüm gönderiyorum - işlev, terminal tarihindeki son kapatılan pozisyonun kârının boyutunu döndürür:

 //+------------------------------------------------------------------+       
//|Функция возвращает профит последней позиции                       |
//+------------------------------------------------------------------+
double ProfitLastPos()
  {
// --- определение границ требуемой торговой истории
   datetime end= TimeCurrent ();                 // текущее серверное время
   datetime start=end- PeriodSeconds ( PERIOD_D1 ); // установим начало на сутки назад
//--- запросим в кэш программы торговую историю за день
   if ( HistorySelect (start,end))
     {
       //--- получим количество сделок в истории
       int history_orders= HistoryDealsTotal ();
       //--- получим тикет сделки из истории, имеющей последний индекс в списке
       ulong order_ticket= HistoryDealGetTicket (history_orders- 1 );

       if (order_ticket> 0 ) // получили в кэш историческую сделку, работаем с ней
        {
         profit= HistoryDealGetDouble (order_ticket, DEAL_PROFIT );
        }
     }
   return (profit);
  }

Benzetme yoluyla, son ticaretin lot büyüklüğünü elde ederiz:

 Volume = HistoryDealGetDouble (order_ticket, DEAL_VOLUME );
 
karakos :

tol64 çok teşekkür ederim! Her şey çalıştı.

...

Ve editörde yine de Ctrl + (ingilizce açık) tuşlarına basarsanız, düzgün biçimlendirilmiş bir kod alırsınız. Foruma bir örnek yüklemeden önce özellikle önemlidir (daha iyi okunabilirlik). ))
 
tol64 :
Ve editörde yine de Ctrl + (ingilizce açık) tuşlarına basarsanız, düzgün biçimlendirilmiş bir kod alırsınız. Foruma bir örnek yüklemeden önce özellikle önemlidir (daha iyi okunabilirlik). ))
Kod stilize, tekrar teşekkürler!
 

Güzel gün! Son zamanlarda MQL5'i kemirmeye başladı. Bir pozisyonu kapatırken sorun yaşıyorum. Kodu yazıyorum: if(!m_Trade.PositionClose(_Symbol,100))//--- mevcut semboldeki pozisyonu kapatın. Sonuç - konum tersine çevrilir! Bir ipucu için çok minnettar olurum, pozisyonu nasıl kapatabilirim?

 
//_____________________________________________________________________________________________________________________________________________
//--------  блок работы с длинной позицией  ---------------------------------------------------------------------------------------------------
      if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
        {
                          
         if( p_close1 <  buy_stop_level   )// если бар 1 закрылся ниже уровня стоп
         {
          if(!m_Trade.PositionClose(_Symbol,100))//--- закрываем позицию по текущему символу
         {
      //--- сообщим о неудаче
      Print("Метод PositionClose() потерпел неудачу. Код возврата=",m_Trade.ResultRetcode(),
            ". Описание кода: ",m_Trade.ResultRetcodeDescription());
         }
   else
         {
       Print("Метод PositionClose() выполнен успешно. Код возврата=",m_Trade.ResultRetcode(),
            " (",m_Trade.ResultRetcodeDescription(),")");       
          }
    
     
           }          
            }
 

Durma seviyesinin altında çubuk kapandıktan sonra uzman günlüğü. Uzun pozisyon vardı = 1 lot, kısa oldu = 1 lot)