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

 
Vitaly Muzichenko :

Hepsi için. Daha kesin olmak gerekirse, grafik penceresinde ayarda belirtilen çubuk sayısını görüntüler ve zaman çerçevesine bağlı değildir.

Not: Bu değeri hiç değiştirmedim ama az önce kontrol ettim ve 1000'den aşağı ayarlamanın imkansız olduğunu gördüm.

Yani iBars() üzerinden kontrol etmeniz mi gerekiyor?

 

Tünaydın. Senaryo neden çalışmıyor?

Hata nerede?


 //+------------------------------------------------------------------+
//|                                                         test.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
   
   if (! ChartSetInteger ( 0 , CHART_IS_MAXIMIZED , true ))
     {
       //--- выведем сообщение об ошибке в журнал "Эксперты"
       Print ( __FUNCTION__ + ", Error Code = " , GetLastError ());
       //return(false);
     };


  }
//+------------------------------------------------------------------+
 
Bu konuyla ilgili olmayan yorumlar " MQL4 MT4 MetaTrader 4 Yeni Başlayanlardan Sorular " bölümüne taşındı.
 

Merhaba arkadaşlar!

Sorular:

1. Verilen Satış Durdurma Limiti emirleri, komisyoncu veya terminal tarafında depolanıyor mu?

2. Program kapatılırken şartlar sağlandığında bu düzen işleyecek mi?

Ticaret MICEX borsasında yapılır. Şimdiden teşekkürler!

Акции: новости и аналитика фондовых рынков - Блоги трейдеров и аналитика финансовых рынков
Акции: новости и аналитика фондовых рынков - Блоги трейдеров и аналитика финансовых рынков
  • www.mql5.com
Акция — это ценная бумага, которая выпускается каким-либо предприятием (акционерным обществом) и дает ее владельцу права на получение части прибыли от этого предприятия в виде дивидендов. Также
 

Tünaydın! Sevgili programcılar. MQL5 ile ilgili soru

Uzman Danışmandaki pozisyonlar nasıl kontrol edilir? Böylece bir çubukta sadece bir açık pozisyon var. Yani, bir pozisyonun kapanması nerede - hangi barda önemli değildir, ancak açılış sadece bir barda olmalıdır.

bu kod tamamen yok sayılıyor, hata nedir, anlamadım.

 if ( OrderSelect ( HistoryDealsTotal ()- 1 ))

{
datetime Cu= PositionsTotal ();
int hd= iBarShift ( Symbol (), _Period ,Cu);
if (hd<= 1 )
{
return ;
}
}



Совершение сделок - Торговые операции - Справка по MetaTrader 5
Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 
Alexey Belyakov :

Tünaydın! Sevgili programcılar. MQL5 ile ilgili soru

Uzman Danışmandaki pozisyonlar nasıl kontrol edilir?. Böylece bir çubukta sadece bir açık pozisyon var. Yani, bir pozisyonun kapanması nerede - hangi barda önemli değildir, ancak açılış sadece bir barda olmalıdır.

Basit bir yol - pozisyonun açıldığı çubuğun açılış zamanını global bir değişkene kaydedin ve yeni bir pozisyon açarken, değer kaydedilen değerden büyükse çubuğun açılış zamanını kontrol edin ve ardından açın.

 
Alexey Belyakov :

Tünaydın! Sevgili programcılar. MQL5 ile ilgili soru

Uzman Danışmandaki pozisyonlar nasıl kontrol edilir?. Böylece bir çubukta sadece bir açık pozisyon var. Yani, bir pozisyonun kapanması nerede - hangi barda önemli değildir, ancak açılış sadece bir barda olmalıdır.

bu kod tamamen yok sayılıyor, hata nedir, anlamadım.



Hata: Sinekleri ve pirzolaları bir demet halinde karıştırdınız - BEKLEMEDEKİ SİPARİŞLERİ ve POZİSYONLARI karıştırdınız.

Karışıklığı önlemek için lütfen yardımı okuyun: Genel ilkeler


Yukarıda basit bir yöntem önerildi - bir pozisyon açarken mevcut çubuğun açılış saatini hatırlayın. Ayrıca, yeni bir pozisyon açmak istiyorsanız, kaydedilen zaman ile mevcut çubuğun açılış zamanını karşılaştırırsınız.

OnTradeTransaction'da pozisyon açılış saatini hatırlamak uygundur:

 //+------------------------------------------------------------------+
//| TradeTransaction function                                        |
//+------------------------------------------------------------------+
void OnTradeTransaction ( const MqlTradeTransaction &trans,
                         const MqlTradeRequest &request,
                         const MqlTradeResult &result)
  {
//--- get transaction type as enumeration value
   ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- if transaction is result of addition of the transaction in history
   if (type== TRADE_TRANSACTION_DEAL_ADD )
     {
       if ( HistoryDealSelect (trans.deal))
         m_deal.Ticket(trans.deal);
       else
         return ;
       if (m_deal. Symbol ()==m_symbol.Name() && m_deal.Magic()==InpMagic)
        {
         if (m_deal.DealType()== DEAL_TYPE_BUY || m_deal.DealType()== DEAL_TYPE_SELL )
           {
             if (m_deal.Entry()== DEAL_ENTRY_IN || m_deal.Entry()== DEAL_ENTRY_INOUT )
               m_last_deal_in= iTime (m_symbol.Name(),InpTimeFrame, 0 );
             int size_need_position= ArraySize (SPosition);
             if (size_need_position> 0 )
              {
               for ( int i= 0 ; i<size_need_position; i++)
                 {
                   if (SPosition[i].waiting_transaction)
                     if (SPosition[i].waiting_order_ticket==m_deal.Order())
                       {
                         Print ( __FUNCTION__ , " Transaction confirmed" );
                        SPosition[i].transaction_confirmed= true ;
                         break ;
                       }
                 }
              }
           }
        }
     }
  }

ve bir sinyal oluştuğunda, zamanı kontrol edin :

 //+------------------------------------------------------------------+
//| Search trading signals                                           |
//+------------------------------------------------------------------+
bool SearchTradingSignals( void )
  {
   if (m_prev_bars==m_last_deal_in) // on one bar - only one deal
       return ( true );


OHLC Kontrol 2 kodundan alınan örnek

Общие принципы - Торговые операции - Справка по MetaTrader 5
Общие принципы - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Перед тем как приступить к изучению торговых функций платформы, необходимо создать четкое представление об основных терминах: ордер, сделка и позиция. — это распоряжение брокерской компании купить или продать финансовый инструмент. Различают два основных типа ордеров: рыночный и отложенный. Помимо них существуют специальные ордера Тейк Профит и...
 

Zor bir şey .... bir şekilde. İlk aşamada " mevcut barın açılış saatini hatırla " sorunu yoktur.

İşte hatırladıklarım:

 if ( PositionsTotal ()== 1 )   // Здесь проверяю, что открыта одна позиция
{
datetime Cu= iTime ( NULL , _Period , 0 );         // Здесь в переменную - время открытия бара при открытой позиции

Ama burada " Kaydedilen zamanı ve mevcut çubuğun açılış saatini kontrol ediyorsunuz." Sorunlar.

Aynı şeyi bitirdim.Buraya bakın:

 if ( PositionsTotal ()== 1 )   // Здесь проверяю, что открыта одна позиция (или была открыта, неважно, любое торговое действие)
{
datetime Cu= iTime ( NULL , _Period , 0 );         // Здесь в переменную - время открытия бара при открытой позиции
int hd=+ iBarShift ( Symbol (), _Period ,Cu)+1;     // Здесь в переменную - бар на котором произошло открытие позиции 
if (hd>=1)                                 //Здесь проверяем - если этих баров, больше чем один, то.......   
{
return ; //....то зацикливанием программу, НО проблема только в return
}
}

Burada sadece "return(-1)" gibi bir programı döngüye almam gerekiyor, ancak void nedeniyle bir dönüşe bir ifade atayamazsınız. Bu an nasıl atlanır? Döngü nasıl yapılır ama geri dönülmez?

Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства позиций
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства позиций
  • www.mql5.com
Тикет позиции. Уникальное число, которое присваивается каждой вновь открытой позиции. Как правило, соответствует тикету ордера, в результате которого она была открыта, за исключением случаев изменения тикета в результате служебных операций на сервере. Например, начисления свопов переоткрытием позиции. Для нахождения ордера, которым была открыта...
 
datetime PR= iTime ( NULL , _Period , 0 );   // проверяю время открытие бара
if ( PositionsTotal ()== 1 )  
{
datetime TK= iTime ( NULL , _Period , 0 );   // время открытия бара при открытой позиции                        
if (PR==TK)                         // сравниваю
{
return ( true );   // НЕ катит true - ошибка 
}
}


Bu seçenek de çalışmadı.

 
Alexey Belyakov :

Zor bir şey .... bir şekilde. İlk aşamada " mevcut barın açılış saatini hatırla " sorunu yoktur.

İşte hatırladıklarım:

Ama burada " Kaydedilen zamanı ve mevcut çubuğun açılış saatini kontrol ediyorsunuz." Sorunlar.

Aynı şeyi bitirdim.Buraya bakın:

Burada sadece "return(-1)" gibi bir programı döngüye almam gerekiyor, ancak void nedeniyle bir dönüşe bir ifade atayamazsınız. Bu an nasıl atlanır? Döngü nasıl yapılır ama geri dönülmez?

Döngü programları için tedavi kullanılır: eller boyuna kadar doğranır. İleride alışkanlık olmasın diye.


İşte ihtiyacınız olan şey - programın tüm gövdesi, sadece sinyalin alındığını işlemeniz gerekiyor:

 //+------------------------------------------------------------------+
//|                              Example One position on one bar.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
//---
#include <Trade\PositionInfo.mqh>
#include <Trade\Trade.mqh>
#include <Trade\SymbolInfo.mqh>
#include <Trade\DealInfo.mqh>
//---
CPositionInfo  m_position;                   // object of CPositionInfo class
CTrade         m_trade;                       // object of CTrade class
CSymbolInfo    m_symbol;                     // object of CSymbolInfo class
CDealInfo      m_deal;                       // object of CDealInfo class
//--- input parameters
input ulong     InpMagic             = 200 ;       // Magic number
//---
datetime m_prev_bars                = 0 ;         // "0" -> D'1970.01.01 00:00';
datetime m_last_deal_in             = 0 ;         // "0" -> D'1970.01.01 00:00';
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
   if (!m_symbol.Name( Symbol ())) // sets symbol name
     {
       Print ( __FILE__ , " " , __FUNCTION__ , ", ERROR: CSymbolInfo.Name" );
       return ( INIT_FAILED );
     }
   RefreshRates();
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//--- we work only at the time of the birth of new bar
   datetime time_0= iTime (m_symbol.Name(), Period (), 0 );
   if (time_0==m_prev_bars)
       return ;
   m_prev_bars=time_0;
   if (!RefreshRates())
     {
      m_prev_bars= 0 ;
       return ;
     }
//--- search for trading signals
   if (!SearchTradingSignals())
     {
      m_prev_bars= 0 ;
       return ;
     }
  }
//+------------------------------------------------------------------+
//| TradeTransaction function                                        |
//+------------------------------------------------------------------+
void OnTradeTransaction ( const MqlTradeTransaction &trans,
                         const MqlTradeRequest &request,
                         const MqlTradeResult &result)
  {
//--- get transaction type as enumeration value
   ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- if transaction is result of addition of the transaction in history
   if (type== TRADE_TRANSACTION_DEAL_ADD )
     {
       if ( HistoryDealSelect (trans.deal))
         m_deal.Ticket(trans.deal);
       else
         return ;
       if (m_deal. Symbol ()==m_symbol.Name() && m_deal.Magic()==InpMagic)
        {
         if (m_deal.DealType()== DEAL_TYPE_BUY || m_deal.DealType()== DEAL_TYPE_SELL )
           {
             if (m_deal.Entry()== DEAL_ENTRY_IN || m_deal.Entry()== DEAL_ENTRY_INOUT )
               m_last_deal_in= iTime (m_symbol.Name(), Period (), 0 );
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Search trading signals                                           |
//+------------------------------------------------------------------+
bool SearchTradingSignals( void )
  {
   if (m_prev_bars==m_last_deal_in) // on one bar - only one deal
       return ( true );
//--- signal
//---
   return ( false );
  }
//+------------------------------------------------------------------+
//| Refreshes the symbol quotes data                                 |
//+------------------------------------------------------------------+
bool RefreshRates()
  {
//--- refresh rates
   if (!m_symbol.RefreshRates())
     {
       Print ( __FILE__ , " " , __FUNCTION__ , ", ERROR: " , "RefreshRates error" );
       return ( false );
     }
//--- protection against the return value of "zero"
   if (m_symbol.Ask()== 0 || m_symbol.Bid()== 0 )
     {
       Print ( __FILE__ , " " , __FUNCTION__ , ", ERROR: " , "Ask == 0.0 OR Bid == 0.0" );
       return ( false );
     }
//---
   return ( true );
  }
//+------------------------------------------------------------------+


' m_prev_bars ' değişkeni mevcut çubuğun açılış zamanını ve ' m_last_deal_in ' değişkeni - pozisyonun açıldığı çubuğun açılış zamanını saklar.

Bu iki değişken, ' SearchTradingSignals ' sinyal alma bloğunda karşılaştırılır.