Selamlar. Yetkili bir video izledim "MQL4'ten MQL5'e - Metatrader 5 için Uzman Danışman nasıl yeniden yazılır". Yazara büyük saygılar. Kendim denemeye karar verdim. yazdı. Fikir şu: 1. Girişlerde dtriger = 1 ayarladım - Buy açılır. 2. Girişlerde dtriger = -1 ayarladım - Satış açılır. 3. Girişlerde dtriger = 0 olarak ayarladım - tüm açık olanlar kapalı. MT5'te zıt konumlarda tutmanın mümkün olmadığını yardım sayfalarında okudum, ve bende onlara sahibim. Soru: mevcut pozisyonun kapanması ne zaman doğru bir şekilde kaydedilir? sayacın açılması (ters). Çok teşekkürler.
#include <Trade\PositionInfo.mqh>
#include <Trade\Trade.mqh>
#include <Trade\SymbolInfo.mqh>
#include <Trade\OrderInfo.mqh>
CPositionInfo o_position;
CTrade o_trade;
CSymbolInfo o_symbol;
COrderInfo o_order;
inputint triger = 0 ;
inputdouble StartLot = 0.01 ;
inputdouble lpos_volume = 1.0 ;
inputint Step = 10 ;
inputint MagicNumber = 12345 ; // Magic nuaberinputint Slippage = 30 ; // slippageint dtriger;
int dStep;
//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit ()
{
dStep = Step ;
dtriger = triger ;
if (!o_symbol.Name( Symbol ()))
return ( INIT_FAILED );
RefreshRates();
o_trade.SetExpertMagicNumber(MagicNumber) ;
if (IsFillingTypeAllowed(o_symbol.Name(), SYMBOL_FILLING_FOK ))
{
o_trade.SetTypeFilling( ORDER_FILLING_FOK );
}
elseif (IsFillingTypeAllowed(o_symbol.Name(), SYMBOL_FILLING_IOC ))
{
o_trade.SetTypeFilling( ORDER_FILLING_IOC );
}
else
{
o_trade.SetTypeFilling( ORDER_FILLING_RETURN );
}
o_trade.SetDeviationInPoints(Slippage);
if (o_symbol. Digits () == 3 || o_symbol. Digits () == 5 )
{
dStep = 10 ;
}
return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit ( constint reason)
{
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick ()
{
datetime lpos_time = 0 ;
double lpos_price_open = 0.0 ;
ENUM_POSITION_TYPE lpos_type = - 1 ;
int pos_count = 0 ;
double sum_profit = 0 ;
for ( int i = PositionsTotal () - 1 ; i>= 0 ; i--)
{
if (o_position.SelectByIndex(i))
{
if (o_position. Symbol () == o_symbol.Name() && o_position.Magic() == MagicNumber)
{
if (o_position.Time() > lpos_time)
{
lpos_time = o_position.Time(); //OrderOpenTime();
lpos_price_open = o_position.PriceOpen(); //OrderOpenPrice();
lpos_type = o_position.PositionType() ; //OrderTipe();
}
pos_count++;
sum_profit = sum_profit + o_position.Commission() + o_position.Swap() + o_position.Profit() ;
}
}
}
// Считаем кол-во отложенных ордеровint stop_count= 0 ;
for ( int i= OrdersTotal ()- 1 ; i >= 0 ; i--)
{
if (o_order.SelectByIndex(i))
{
if (o_order. Symbol () == o_symbol.Name() && o_order.Magic() == MagicNumber)
stop_count++;
}
}
if (!RefreshRates())
return ;
if (dtriger == 0 )
{
CloseAll();
return ;
}
// + ----- Откраваем Первый ордер ++++++++++if (pos_count == 0 && stop_count == 0 )
{
if ( dtriger == - 1 && lpos_type != POSITION_TYPE_SELL )
{
o_trade.Sell(StartLot * lpos_volume , o_symbol.Name()); // S E L L 11111
}
if ( dtriger == 1 && lpos_type != POSITION_TYPE_BUY )
{
o_trade.Buy(StartLot * lpos_volume , o_symbol.Name()); // B U Y 11111
}
}
// + ----- Переворот ++++++++++++++++++++++++++++ if (pos_count> 0 )
{
if (lpos_type == POSITION_TYPE_BUY )
{
if ( dtriger == - 1 )
{
o_trade.Sell(StartLot * lpos_volume , o_symbol.Name()); // S E L L +++++
}
}
if (lpos_type== POSITION_TYPE_SELL )
{
if ( dtriger == 1 )
{
o_trade.Buy(StartLot * lpos_volume , o_symbol.Name()); // B U Y +++++
}
}
}
if (pos_count> 0 && stop_count> 0 )
DeleteStopOrders() ;
}
//-----------------------------------------------------------bool RefreshRates()
{
if (!o_symbol.RefreshRates())
return ( false ) ;
if (o_symbol.Ask() == 0 || o_symbol.Bid() == 0 )
return ( false );
return ( true );
}
//--- --------------------------------------------------------- bool IsFillingTypeAllowed ( string symbol, int fill_type)
{
int filling = ( int ) SymbolInfoInteger (symbol, SYMBOL_FILLING_MODE );
return ((filling && fill_type) == fill_type) ;
}
// -------------------------------------------------- void CloseAll()
{
for ( int index = PositionsTotal ()- 1 ; index >= 0 ; index--)
{
if (o_position.SelectByIndex(index))
{
if (o_position. Symbol () == o_symbol.Name() && o_position.Magic() == MagicNumber)
{
o_trade.PositionClose(o_position.Ticket());
}
}
}
}
//----------------------------------------------------------- // Delete all pending orders//-------------------------------------void DeleteStopOrders()
{
for ( int i = OrdersTotal () - 1 ; i >= 0 ; i-- )
{
if (o_order.SelectByIndex(i))
if (o_order. Symbol () == o_symbol.Name() && o_order.Magic() == MagicNumber)
o_trade.OrderDelete(o_order.Ticket());
}
}
//+------------------------------------------------------------------+
Selamlar. Yetkili bir video izledim "MQL4'ten MQL5'e - Metatrader 5 için Uzman Danışman nasıl yeniden yazılır". Yazara büyük saygılar. Kendim denemeye karar verdim. yazdı. Fikir şu: 1. Girişlerde dtriger = 1 ayarladım - Buy açılır. 2. Girişlerde dtriger = -1 ayarladım - Satış açılır. 3. Girişlerde dtriger = 0 olarak ayarladım - tüm açık olanlar kapalı. MT5'te zıt pozisyonları tutmanın mümkün olmadığını yardım sayfalarında okudum, ve bende onlara sahibim. Soru: mevcut pozisyonun kapanışı ne zaman doğru bir şekilde kaydedilir? sayacın açılması (ters). Çok teşekkürler.
Перед тем как приступить к изучению торговых функций платформы, необходимо создать четкое представление об основных терминах: ордер, сделка и позиция. — это распоряжение брокерской компании купить или продать финансовый инструмент. Различают два основных типа ордеров: рыночный и отложенный. Помимо них существуют специальные ордера Тейк Профит...
1. dtriger = 1 - Satın Al'ı açar. 2. dtriger = -1 - Satış açılır. 3. dtriger = 0 - tüm açık olanlar kapalı.
Ve danışman bunu yapmalıdır:
ALIŞ açmanız gerekiyorsa - o zaman önce SATIŞ'ı kapatmanız gerekir (SAT pozisyonlarını kapatmak için bir komut verin - var olup olmaması önemli değildir)
Bir SATIŞ açmanız gerekiyorsa, önce ALIŞ pozisyonunu kapatmanız gerekir (ALIŞ pozisyonlarını kapatmak için bir komut verin - var olup olmaması önemli değildir)
her şeyi kapatmanız gerekiyorsa, o zaman her şeyi kapatın (alıp satmamaları önemli değil)
Uygulama için iki algoritmaya ihtiyaç vardır (burada benzersiz bir tanımlayıcı da vardır - sihirli sayı) - ayrıca kapatılabilir.
//+------------------------------------------------------------------+//| Close positions |//+------------------------------------------------------------------+void ClosePositions( constENUM_POSITION_TYPE pos_type)
{
for ( int i= PositionsTotal ()- 1 ;i>= 0 ;i--) // returns the number of current positionsif (m_position.SelectByIndex(i)) // selects the position by index for further access to its propertiesif (m_position. Symbol ()==m_symbol.Name() && m_position.Magic()==InpMagic)
if (m_position.PositionType()==pos_type) // gets the position type
m_trade.PositionClose(m_position.Ticket()); // close a position by the specified symbol
}
ve
//+------------------------------------------------------------------+//| Close all positions |//+------------------------------------------------------------------+void CloseAllPositions( void )
{
for ( int i= PositionsTotal ()- 1 ;i>= 0 ;i--) // returns the number of current positionsif (m_position.SelectByIndex(i)) // selects the position by index for further access to its propertiesif (m_position. Symbol ()==m_symbol.Name() && m_position.Magic()==InpMagic)
m_trade.PositionClose(m_position.Ticket()); // close a position by the specified symbol
}
Genel anlamı, PositionsTotal() -1'den 0'a bir döngüdeki tüm pozisyonları atlamaktır. Yani, PositionsTotal()-1'den sıfıra ve sıfırdan PositionsTotal()-1'e değil. Bu önemli.
Ayrıca başka bir ipucu: MetaTrader 5'te çalışırken, bir sipariş BEKLEMEDEKİ SİPARİŞ'tir . Bu nedenle, ilk aşamada, düşüncelerinizde kafa karışıklığı yaratmamak için "Sipariş" kelimesini bile hatırlamamanız şiddetle tavsiye edilir.
Vladimir Karputov : Ayrıca başka bir ipucu: MetaTrader 5'te çalışırken, bir sipariş BEKLEMEDEKİ SİPARİŞ'tir . Bu nedenle, ilk aşamada, düşüncelerinizde kafa karışıklığı yaratmamak için "Sipariş" kelimesini bile hatırlamamanız şiddetle tavsiye edilir.
Ayrıca Al ve Sat piyasa emirlerinin yanı sıra CloseBy kapanış emri de vardır.
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
Selamlar. Yetkili bir video izledim "MQL4'ten MQL5'e - Metatrader 5 için Uzman Danışman nasıl yeniden yazılır".
Yazara büyük saygılar. Kendim denemeye karar verdim. yazdı. Fikir şu:
1. Girişlerde dtriger = 1 ayarladım - Buy açılır.
2. Girişlerde dtriger = -1 ayarladım - Satış açılır.
3. Girişlerde dtriger = 0 olarak ayarladım - tüm açık olanlar kapalı.
MT5'te zıt konumlarda tutmanın mümkün olmadığını yardım sayfalarında okudum,
ve bende onlara sahibim.
Soru: mevcut pozisyonun kapanması ne zaman doğru bir şekilde kaydedilir?
sayacın açılması (ters).
Çok teşekkürler.
Selamlar. Yetkili bir video izledim "MQL4'ten MQL5'e - Metatrader 5 için Uzman Danışman nasıl yeniden yazılır".
Yazara büyük saygılar. Kendim denemeye karar verdim. yazdı. Fikir şu:
1. Girişlerde dtriger = 1 ayarladım - Buy açılır.
2. Girişlerde dtriger = -1 ayarladım - Satış açılır.
3. Girişlerde dtriger = 0 olarak ayarladım - tüm açık olanlar kapalı.
MT5'te zıt pozisyonları tutmanın mümkün olmadığını yardım sayfalarında okudum,
ve bende onlara sahibim.
Soru: mevcut pozisyonun kapanışı ne zaman doğru bir şekilde kaydedilir?
sayacın açılması (ters).
Çok teşekkürler.
Kılavuzu çok dikkatli okumamışsınız anlaşılan.
Referans: Genel İlkeler - Alım Satım İşlemleri .
Alt satır: MetaTrader 5, hem Netleştirme sistemine hem de Riskten Korunma sistemine sahiptir.
Ve görevinizi farklı bir şekilde formüle ederdim:
1. dtriger = 1 - Satın Al'ı açar.
2. dtriger = -1 - Satış açılır.
3. dtriger = 0 - tüm açık olanlar kapalı.
Ve danışman bunu yapmalıdır:
Uygulama için iki algoritmaya ihtiyaç vardır (burada benzersiz bir tanımlayıcı da vardır - sihirli sayı) - ayrıca kapatılabilir.
ve
Genel anlamı, PositionsTotal() -1'den 0'a bir döngüdeki tüm pozisyonları atlamaktır. Yani, PositionsTotal()-1'den sıfıra ve sıfırdan PositionsTotal()-1'e değil. Bu önemli.
Ayrıca başka bir ipucu: MetaTrader 5'te çalışırken, bir sipariş BEKLEMEDEKİ SİPARİŞ'tir . Bu nedenle, ilk aşamada, düşüncelerinizde kafa karışıklığı yaratmamak için "Sipariş" kelimesini bile hatırlamamanız şiddetle tavsiye edilir.
Ayrıca Al ve Sat piyasa emirlerinin yanı sıra CloseBy kapanış emri de vardır.
Çok teşekkürler, saat gibi.
Çok teşekkürler, saat gibi.
O zaman çok nazik ol.
Boşluk eklendi ve bir ön kapanış öngördü, ancak yine siparişler burada ve orada asılı duruyor.
O zaman çok nazik ol.
Boşluk eklendi ve bir ön kapanış öngördü, ancak yine siparişler burada ve orada asılı duruyor.
Çok teşekkürler, saat gibi.
Açılış sinyali nedir? Aksi takdirde, sonuç tam bir kod değildir - sadece pozisyonları kapatır ve pozisyonları da açmanız gerekir...
ticaret komutu.mq5
#özellik sürümü "1.000"
Şimdiye kadar sadece üç şey yapar: