Акция — это ценная бумага, которая выпускается каким-либо предприятием (акционерным обществом) и дает ее владельцу права на получение части прибыли от этого предприятия в виде дивидендов. Также
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 ;
}
}
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
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.
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.
//+------------------------------------------------------------------+//| TradeTransaction function |//+------------------------------------------------------------------+voidOnTradeTransaction ( constMqlTradeTransaction &trans,
constMqlTradeRequest &request,
constMqlTradeResult &result)
{
//--- get transaction type as enumeration valueENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- if transaction is result of addition of the transaction in historyif (type== TRADE_TRANSACTION_DEAL_ADD )
{
if ( HistoryDealSelect (trans.deal))
m_deal.Ticket(trans.deal);
elsereturn ;
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 dealreturn ( true );
Перед тем как приступить к изучению торговых функций платформы, необходимо создать четкое представление об основных терминах: ордер, сделка и позиция. — это распоряжение брокерской компании купить или продать финансовый инструмент. Различают два основных типа ордеров: рыночный и отложенный. Помимо них существуют специальные ордера Тейк Профит и...
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?
Тикет позиции. Уникальное число, которое присваивается каждой вновь открытой позиции. Как правило, соответствует тикету ордера, в результате которого она была открыта, за исключением случаев изменения тикета в результате служебных операций на сервере. Например, начисления свопов переоткрытием позиции. Для нахождения ордера, которым была открыта...
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 parametersinputulong 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 |//+------------------------------------------------------------------+intOnInit ()
{
//---if (!m_symbol.Name( Symbol ())) // sets symbol name
{
Print ( __FILE__ , " " , __FUNCTION__ , ", ERROR: CSymbolInfo.Name" );
return ( INIT_FAILED );
}
RefreshRates();
//---return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit ( constint reason)
{
//---
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick ()
{
//--- we work only at the time of the birth of new bardatetime 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 signalsif (!SearchTradingSignals())
{
m_prev_bars= 0 ;
return ;
}
}
//+------------------------------------------------------------------+//| TradeTransaction function |//+------------------------------------------------------------------+voidOnTradeTransaction ( constMqlTradeTransaction &trans,
constMqlTradeRequest &request,
constMqlTradeResult &result)
{
//--- get transaction type as enumeration valueENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- if transaction is result of addition of the transaction in historyif (type== TRADE_TRANSACTION_DEAL_ADD )
{
if ( HistoryDealSelect (trans.deal))
m_deal.Ticket(trans.deal);
elsereturn ;
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 dealreturn ( true );
//--- signal//---return ( false );
}
//+------------------------------------------------------------------+//| Refreshes the symbol quotes data |//+------------------------------------------------------------------+bool RefreshRates()
{
//--- refresh ratesif (!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.
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?
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!
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.
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.
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:
ve bir sinyal oluştuğunda, zamanı kontrol edin :
OHLC Kontrol 2 kodundan alınan örnek
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?
Bu seçenek de çalışmadı.
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:
' 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.