MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 122
![MQL5 - MetaTrader 5 müşteri terminalinde yerleşik ticaret stratejileri dili](https://c.mql5.com/i/registerlandings/logo-2.png)
Ticaret fırsatlarını kaçırıyorsunuz:
- Ücretsiz ticaret uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
Önceki soruya eklemeye karar verdim.
1)
Diyelim ki bir sinyalim var - yayılmanın keskin bir şekilde genişlemesi (haberlerde)
tüm cari işlemleri kapat
Ancak haberlerde, emirlerin bu şekilde kapanmasına veya açılmasına izin verilmeyecek.
yani bir komut alırsanız, OrderClose'u bir döngüye koyalım + Sleep (3000) ve kapanana kadar çalıştıralım
2)
butonda bir dahili değişkeni ve basılan/basılan değeri emir açma ihtimaline bağlarsanız gerçek zamanlı olarak çalışır mı?
Önceki soruya eklemeye karar verdim.
1)
Diyelim ki bir sinyalim var - yayılmanın keskin bir şekilde genişlemesiyle (haberlerde)
tüm cari işlemleri kapat
Ancak haberlerde, emirlerin bu şekilde kapanmasına veya açılmasına izin verilmeyecek.
yani bir komut alırsanız, OrderClose'u bir döngüye koyalım + Sleep (3000) ve kapanana kadar çalıştıralım
2)
butonda bir dahili değişkeni ve basılan/basılan değeri emir açma ihtimaline bağlarsanız gerçek zamanlı olarak çalışır mı?
Selamlar, siparişlerin geçmişini grafik üzerine çizen bir gösterge yazıyorum , kod:
//| history.mq4 |
//| Copyright 2017, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
#property indicator_chart_window
extern int MagicNumber = 1110 ;
extern datetime HistoryOrdersFromDateTime = 0 ;
extern color SellColor = clrRed ;
extern color BuyColor = clrBlue ;
extern color ProfitColor = clrWhite ;
extern bool DeleteHistoryOrders = false ;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit ()
{
//--- indicator buffers mapping
//---
return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
void start()
{
for ( int i= OrdersHistoryTotal ()- 1 ; i>= 0 ; i--)
{
if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY ) && OrderMagicNumber ()==MagicNumber && OrderSymbol ()== Symbol () && OrderType ()<= 1 )
{
if (HistoryOrdersFromDateTime< OrderCloseTime ())
{
if (( TimeCurrent ()- OrderCloseTime ())> 60 )
HistoryOrders();
}
}
}
}
void HistoryOrders()
{
double b= OrderOpenPrice (), d= OrderClosePrice (), lots= OrderLots (), Profit= 0 ;
datetime a= OrderOpenTime (), c= OrderCloseTime (), close_time;
string Ticket=( string ) OrderTicket (), type= "Sell" , symbol= OrderSymbol (), comment= OrderComment (), Background;
color col=SellColor;
if ( OrderType ()== 0 ) {col=BuyColor; type= "Buy" ;}
if (DeleteHistoryOrders== false )
{
//Начальная точка
ObjectCreate ( "#" +Ticket+ " " +type+ " " + DoubleToString (lots, 2 )+ " " +symbol+ " at " + DoubleToString (b, Digits )+ "\n" +comment, OBJ_ARROW , 0 ,a,b);
ObjectSet ( "#" +Ticket+ " " +type+ " " + DoubleToString (lots, 2 )+ " " +symbol+ " at " + DoubleToString (b, Digits )+ "\n" +comment, OBJPROP_COLOR ,col);
ObjectSet ( "#" +Ticket+ " " +type+ " " + DoubleToString (lots, 2 )+ " " +symbol+ " at " + DoubleToString (b, Digits )+ "\n" +comment, OBJPROP_ARROWCODE , 1 );
//Линия
ObjectCreate ( "#" +Ticket+ " " + DoubleToString (b, Digits )+ " -> " + DoubleToString (d, Digits ), OBJ_TREND , 0 ,a,b,c,d);
ObjectSet ( "#" +Ticket+ " " + DoubleToString (b, Digits )+ " -> " + DoubleToString (d, Digits ), OBJPROP_COLOR ,col);
ObjectSet ( "#" +Ticket+ " " + DoubleToString (b, Digits )+ " -> " + DoubleToString (d, Digits ), OBJPROP_WIDTH , 1 );
ObjectSet ( "#" +Ticket+ " " + DoubleToString (b, Digits )+ " -> " + DoubleToString (d, Digits ), OBJPROP_STYLE , STYLE_DOT );
ObjectSet ( "#" +Ticket+ " " + DoubleToString (b, Digits )+ " -> " + DoubleToString (d, Digits ), OBJPROP_RAY , 0 );
//Конечная точка
ObjectCreate ( "#" +Ticket+ " " +type+ " " + DoubleToString (lots, 2 )+ " " +symbol+ " at " + DoubleToString (b, Digits )+ " close at " + DoubleToString (d, Digits ), OBJ_ARROW , 0 ,c,d);
ObjectSet ( "#" +Ticket+ " " +type+ " " + DoubleToString (lots, 2 )+ " " +symbol+ " at " + DoubleToString (b, Digits )+ " close at " + DoubleToString (d, Digits ), OBJPROP_COLOR ,col);
ObjectSet ( "#" +Ticket+ " " +type+ " " + DoubleToString (lots, 2 )+ " " +symbol+ " at " + DoubleToString (b, Digits )+ " close at " + DoubleToString (d, Digits ), OBJPROP_ARROWCODE , 3 );
//Расчет профита
for ( int i= OrdersHistoryTotal ()- 1 ; i>= 0 ; i--)
{
if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY ) && OrderMagicNumber ()==MagicNumber && OrderSymbol ()== Symbol () && OrderType ()<= 1 )
{
close_time= OrderCloseTime ();
//60 секунд разницы между закрытием первого и последнего ордера в сетке
if (c<=close_time+ 60 && c>=close_time- 60 )
{
Profit+= OrderProfit ()+ OrderCommission ()+ OrderSwap ();
Ticket=( string ) OrderTicket ();
}
}
}
//Размер фона
for ( int i= 2 ; i< StringLen ( DoubleToString (Profit, 2 )); i++)
StringAdd (Background, "g" );
//Фон профита
ObjectCreate ( "#" +Ticket+ " Background" , OBJ_TEXT , 0 ,c,d);
ObjectSet ( "#" +Ticket+ " Background" , OBJPROP_ANCHOR , ANCHOR_LOWER );
ObjectSetText ( "#" +Ticket+ " Background" ,Background, 10 , "Webdings" ,col);
ObjectSet ( "#" +Ticket+ " Background" , OBJPROP_PRICE1 ,d);
ObjectSet ( "#" +Ticket+ " Background" , OBJPROP_TIME1 ,c+ Period ());
//Профит
ObjectCreate ( "#" +Ticket+ " Profit: " + DoubleToString (Profit, 2 ), OBJ_TEXT , 0 ,c,d);
ObjectSet ( "#" +Ticket+ " Profit: " + DoubleToString (Profit, 2 ), OBJPROP_ANCHOR , ANCHOR_LOWER );
ObjectSetText ( "#" +Ticket+ " Profit: " + DoubleToString (Profit, 2 ), DoubleToString (Profit, 2 ), 10 , "Arial" ,ProfitColor);
ObjectSet ( "#" +Ticket+ " Profit: " + DoubleToString (Profit, 2 ), OBJPROP_PRICE1 ,d);
ObjectSet ( "#" +Ticket+ " Profit: " + DoubleToString (Profit, 2 ), OBJPROP_TIME1 ,c+ Period ());
} else ObjectsDeleteAll ( 0 , "#" +Ticket+ " " );
}
void OnDeinit ( const int reason)
{
//Удалаение истории ордеров
for ( int i= 0 ; i< OrdersHistoryTotal (); i++)
{
DeleteHistoryOrders= true ;
if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY ) && OrderMagicNumber ()==MagicNumber && OrderSymbol ()== Symbol ())
HistoryOrders();
}
}
Gösterge tek bir anlaşmayı doğru bir şekilde çizer (çizgi>arka plan>kar), ancak kapalı sipariş ızgaralarının gösteriminde küçük bir "cant" (ekran görüntüsü ekli) vardır, çizgiler arka planda ve kârda üst üste bindirilir (çizgi(1)>arka plan) >kâr>satır(2) >satır(3)>satır(4) . . . ).
Şu şekilde olmalıdır: (line(1)>line(2)>line(3)>line(4) . . . >background>kâr). Tefli çeşitli danslar başarıya yol açmadı, sonuçlanmasına yardımcı oldu.
Selamlar, siparişlerin geçmişini grafik üzerine çizen bir gösterge yazıyorum ,
Gösterge tek bir anlaşmayı doğru bir şekilde çizer (satır>arka plan>kar), ancak kapalı sipariş ızgaralarının görüntüsünde küçük bir "cant" (ekran görüntüsü ekli) vardır, çizgiler arka planda ve kârda üst üste bindirilir (satır(1)> arkaplan>kar>satır(2) >satır(3)>satır(4) . . . ).
Şu şekilde olmalıdır: (line(1)>line(2)>line(3)>line(4) . . . >background>kâr). Tefli çeşitli danslar başarıya yol açmadı, sonuçlanmasına yardımcı oldu.
OBJPROP_BACK özelliğini arka planda çizgilere ve simgelere atamayı deneyin.
Bir seçenek değil, bu yüzden çizgiler arka planda (mumların arkasında) olur, ancak çizimin mumların üstünde olması gerekir: mumlar>çizgiler>kar arka planı>kar
Bu arada, bu sizi kar hesaplamak için ek bir döngüden kurtaracaktır.
Bu
for ( int i= OrdersHistoryTotal ()- 1 ; i>= 0 ; i--)
{
if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY ) && OrderMagicNumber ()==MagicNumber && OrderSymbol ()== Symbol () && OrderType ()<= 1 )
{
close_time= OrderCloseTime ();
//60 секунд разницы между закрытием первого и последнего ордера в сетке
if (c<=close_time+ 60 && c>=close_time- 60 )
{
Profit+= OrderProfit ()+ OrderCommission ()+ OrderSwap ();
Ticket=( string ) OrderTicket ();
}
}
}
ps lütfen. Bu düğmeyi kullanarak fotoğraf yayınlayın
Sonra sadece çizim sırası. Veya arka plan ve kar çizerken bu nesnelerin zamana göre varlığını kontrol edin , OBJ_TEXT nesnesindeki kar değerini okuyun ve mevcut siparişin karına ekleyin. Ardından arka planı silin ve kâr edin ve yeniden çizin.
Bu arada, bu sizi kar hesaplamak için ek bir döngüden kurtaracaktır.
ve kârı, sipariş parametrelerinin geri kalanıyla birlikte başlangıçta belirlersiniz.
Böyle bir çizim dizisi nasıl ayarlanır, diyelim ki, önce onları birbirine bağlayan tüm noktaları ve çizgileri çizelim, sonra arka planı ve kârı çizmeye devam edelim?
Böyle bir çizim dizisi nasıl ayarlanır, diyelim ki, önce onları birbirine bağlayan tüm noktaları ve çizgileri çizelim, sonra arka planı ve kârı çizmeye devam edelim?
Bu seçeneği düşünmek daha iyidir.
ObjectFind () daha sonra nesne bulunursa ObjectGetString () metinden sayıya transfer, alınan siparişe son siparişin karını ekleyin, eski OBJ_TEXT'i silin ve yeni bir tane çizin.
Bu, bu çubukta kapatılan ilk veya tek siparişse, OBJ_TEXT basitçe çizilir ve bu kadar.
Ve adı basitleştirmek için bileti değil , barın açılış saatini ayarlayın. Yoksa daha fazla çalışma için bilet gerekli mi?
Eh, eğer ilk varsayımıma göre, o zaman evet. Ve sonra hemen bir doğaçlama parladı ve ilk cümleyi silmedim, ama ikincisini daha çok seviyorum.
Bu seçeneği düşünmek daha iyidir.
ObjectFind () daha sonra nesne bulunursa ObjectGetString () metinden sayıya transfer, alınan siparişe son siparişin karını ekler, eski OBJ_TEXT'i siler ve yenisini çizeriz.
Bu, bu çubukta kapatılan ilk veya tek siparişse, OBJ_TEXT basitçe çizilir ve bu kadar.
Ve adı basitleştirmek için bileti değil , barın açılış saatini ayarlayın. Yoksa daha fazla çalışma için bilet gerekli mi?
Evet, geçmişin sonraki analizi için bilet gereklidir. Yeniden çizimi zorladığınız için teşekkürler. Aşağıdaki kontrolü ekleyerek ve koda yeniden çizerek sorunu biraz daha kolay çözdüm:
for ( int i= OrdersHistoryTotal ()- 1 ; i>= 0 ; i--)
{
if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY ) && OrderMagicNumber ()==MagicNumber && OrderSymbol ()== Symbol () && OrderType ()<= 1 )
{
close_time= OrderCloseTime ();
//60 секунд разницы между закрытием первого и последнего ордера в сетке
if (c<=close_time+ 60 && c>=close_time- 60 )
{
Profit+= OrderProfit ()+ OrderCommission ()+ OrderSwap ();
ProfitTicket=( string ) OrderTicket ();
CountOrders++;
}
}
}
//Перерисовка фона и профита
if ( CountOrders > 1 )
{
ObjectDelete ( "#" +Ticket+ " Background" );
ObjectDelete ( "#" +Ticket+ " Profit: " + DoubleToString (Profit, 2 ));
Ticket=ProfitTicket;
}
Bunun ne kadar doğru olduğunu bilmiyorum ama prensipte olması gerektiği gibi çiziyor (çizgiler> arka plan> kâr):
Evet, geçmişin sonraki analizi için bilet gereklidir. Aşağıdaki kontrolü ekleyerek ve koda yeniden çizerek sorunu biraz daha kolay çözdüm:
for ( int i= OrdersHistoryTotal ()- 1 ; i>= 0 ; i--)
{
if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY ) && OrderMagicNumber ()==MagicNumber && OrderSymbol ()== Symbol () && OrderType ()<= 1 )
{
close_time= OrderCloseTime ();
//60 секунд разницы между закрытием первого и последнего ордера в сетке
if (c<=close_time+ 60 && c>=close_time- 60 )
{
Profit+= OrderProfit ()+ OrderCommission ()+ OrderSwap ();
ProfitTicket=( string ) OrderTicket ();
CountOrders++;
}
}
}
//Перерисовка фона и профита
if ( CountOrders > 1 )
{
ObjectDelete ( "#" +Ticket+ " Background" );
ObjectDelete ( "#" +Ticket+ " Profit: " + DoubleToString (Profit, 2 ));
Ticket=ProfitTicket;
}
Prensip olarak doğru çizer (çizgiler> arka plan> kâr):