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
ve tüm bunlar nerede? bunu bir değişkende veya dizide bir yere mi yazıyorsunuz? önce nerede sakladığınızı gösterin, sonra ne yapacağınız görülecektir.
Peki, o zaman raflarda: siparişler için bir kapanış saati var, kapanış saatinde çakışan bir bilet veya sipariş sayısı var. Nasıl birleştirilir ve bu siparişlerin karı nasıl hesaplanır ?
Zor değil gibi görünüyor, ama net değil.
Bunlardan hangisinin kırmızı ile vurgulandığını şimdiye kadar kimse anlayamadı. Bu siparişler için kesin arama kriterlerine ihtiyacımız var. Bu nedenle parmaklarda nasıl söyleneceğini resimlerle vb. açıklamaya çalışın.
?
Neden kimse anlayamıyor, büyük ihtimalle kendini kastediyorsun?
Uzun zamandır her şey açıktı.
Madam, programının ayrıntılarını yayınlamadan bunu kendi başına yapmak istiyor.
Bunlardan hangisinin kırmızı ile vurgulandığını şimdiye kadar kimse anlayamadı. Bu siparişler için kesin arama kriterlerine ihtiyacımız var. Bu nedenle parmaklarda nasıl söyleneceğini resimlerle vb. açıklamaya çalışın.
Evet, zaten kesinlikle %100 çalışma koşulu verdim ve onu bitmiş bir kod olarak ekledim. Aynı zamanda kodun terminali yeniden başlatmaktan korkmayan bir yöntem kullandığını ve terminal açıldığında hiçbir şeyin kaybolmayacağını ve çalışmaya devam edeceğini de belirtmek gerekir. Ama burada sadece test cihazında çalışacak bir bisiklet icat ettiler.
Sergey , ayrıca orijinal TS kodunda, bir seri 5 pozisyondan kapatıldığında, kapanışın ortasında bir emrin de silindiğini, bunun da gerçek ticarette iyi bir şeye yol açmayacağını unutmayın. Genel olarak, araç dışında herkes için her şey açıktır.
//| Natashe4ka.mq4 |
//| Sergey Gritsay |
//| https://www.mql5.com/ru/users/sergey1294 |
//+------------------------------------------------------------------+
#property copyright "Sergey Gritsay"
#property link "https://www.mql5.com/ru/users/sergey1294"
#property version "1.00"
#property strict
input int Magic= 1 ; //Identification number
double Profit= 0 ;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit ()
{
//---
//---
return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick ()
{
color ProfitColor= 0 ;
// START //
LastProfitCL_1(Profit, TimeCurrent (),- 1 );
if (Profit< 0 )ProfitColor= clrRed ;
else if (Profit> 0 )ProfitColor= clrLimeGreen ;
else ProfitColor= clrDarkGray ;
ObjectCreate ( "Last Profit" , OBJ_LABEL , 0 , 0 , 0 );
ObjectSet ( "Last Profit" , OBJPROP_CORNER , 1 );
ObjectSet ( "Last Profit" , OBJPROP_XDISTANCE , 5 );
ObjectSet ( "Last Profit" , OBJPROP_YDISTANCE , 15 );
ObjectSetText ( "Last Profit" , StringConcatenate ( "Last Profit: " , DoubleToStr (Profit, 2 )), 10 , "Arial" ,ProfitColor);
// END START //
}
//+------------------------------------------------------------------+
//Вариант 1
//+------------------------------------------------------------------+
bool LastProfitCL_1( double &LastProfit, //сюда записываем профит
datetime timecurent, // текущее время
int op=- 1 //"op" позиция (-1 любая позиция)
)
{
double profit= 0 ;
int cnt= 0 ;
datetime timecurents= 0 ;
int total= OrdersHistoryTotal ();
for ( int i=total- 1 ;i>= 0 ;i--)
{
if (! OrderSelect (i, SELECT_BY_POS , MODE_HISTORY )) continue ;
if ( OrderMagicNumber ()!=Magic) continue ;
if ( OrderSymbol ()!= _Symbol ) continue ;
if ( OrderType ()> 1 ) continue ; // исключим удаленные отложенные ордера
if ( OrderCloseTime ()!=timecurent) continue ;
if ( OrderType ()==op || op==- 1 )
{
profit+= OrderProfit ()+ OrderCommission ()+ OrderSwap ();
cnt++;
}
}
if (cnt!= 0 )
{
LastProfit=profit;
return ( true );
}
return ( false );
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Вариант 2 |
//+------------------------------------------------------------------+
bool LastProfitCL_2( double &LastProfit, //сюда записываем профит
datetime timecurent, // текущее время
int op=- 1 //"op" позиция (-1 любая позиция)
)
{
double profit= 0 ;
int cnt= 0 ;
datetime timecurents= 0 ;
int total= OrdersHistoryTotal ();
if ( OrderSelect (total- 1 , SELECT_BY_POS , MODE_HISTORY ))
{
timecurents= OrderCloseTime ();
}
for ( int i=total- 1 ;i>= 0 ;i--)
{
if (! OrderSelect (i, SELECT_BY_POS , MODE_HISTORY )) continue ;
if ( OrderMagicNumber ()!=Magic) continue ;
if ( OrderSymbol ()!= _Symbol ) continue ;
if ( OrderCloseTime ()<timecurents) continue ;
if ( OrderType ()> 1 ) continue ; // исключим удаленные отложенные ордера
if ( OrderType ()==op || op==- 1 )
{
profit+= OrderProfit ()+ OrderCommission ()+ OrderSwap ();
cnt++;
}
}
if (cnt!= 0 )
{
LastProfit=profit;
return ( true );
}
return ( false );
}
//+------------------------------------------------------------------+
Fonksiyonun ikinci versiyonunda düzeltmeler yapıldı
datetime timecurent, // текущее время
int op=- 1 //"op" позиция (-1 любая позиция)
)
{
double profit= 0 ;
int cnt= 0 ;
datetime timecurents= 0 ;
int total= OrdersHistoryTotal ();
for ( int i=total- 1 ;i>= 0 ;i--)
{
if (! OrderSelect (i, SELECT_BY_POS , MODE_HISTORY )) continue ;
if ( OrderType ()> 1 ) continue ; // исключим удаленные отложенные ордера
if ( OrderType ()!=op && op!=- 1 ) continue ;
if ( OrderMagicNumber ()!=Magic) continue ;
if ( OrderSymbol ()!= _Symbol ) continue ;
if (timecurents== 0 )timecurents= OrderCloseTime (); // запомним время последнего закрытого ордера
if ( OrderCloseTime ()<timecurents) continue ;
profit+= OrderProfit ()+ OrderCommission ()+ OrderSwap ();
cnt++;
}
if (cnt!= 0 )
{
LastProfit=profit;
return ( true );
}
return ( false );
}
.........
Fonksiyonun ikinci versiyonunda düzeltmeler yapıldı
Yardım için teşekkürler.
Seçenek 1 düzgün çalışmıyor
Seçenek 2 doğru çalışıyor.
Ve benim versiyonum da düzgün çalışıyor ancak siparişler başka bir güne veya daha fazlasına aktarılırsa yanlış hesaplama değeri net değil, kar 190, ancak 4.27 olması gerekiyor.
3 numaralı ekran görüntüsüne bakın https://www.mql5.com/ru/forum/162930/page3
// Возвращает суммарный профит в валюте депозита серии закрытых ордеров |
//+----------------------------------------------------------------------------+
double LastProfitCL( int op=- 1 ){ //"op" позиция (-1 любая позиция)
double LastProfit= 0 ;
datetime t= 0 ;
for (i= OrdersHistoryTotal ()- 1 ;i>= 0 ;i--)
if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY ) && ( OrderType ()== OP_BUY || OrderType ()== OP_SELL ) && OrderSymbol ()== Symbol () && OrderMagicNumber ()==magic) {
if ( OrderSymbol ()!= Symbol ()|| OrderMagicNumber ()!=magic) continue ;
if (t< OrderCloseTime ()) {t= OrderCloseTime ();}
if ((op< 0 || OrderType ()==op) && t== OrderCloseTime ()) {LastProfit+= OrderProfit ()+ OrderCommission ()+ OrderSwap ();}
}
return (LastProfit);
}
Anlaşıldığı üzere sorun sipariş sayısında değil, siparişlerin başka bir güne veya daha fazlasına aktarılmasında.
Yani seriyi kapatıyorsun ya da ne? Tüm siparişler bir döngüde kapatılırsa transfer nedir?
Emirler bir seri halinde kapatılır, ancak kapanış için herhangi bir koşul yoksa, siparişler bir veya iki gün içinde toplanır vb.
Her ne kadar sipariş sayısı da kar değerini etkiler.
3'ten fazla sipariş varsa, değer yalnızca son kapatılan siparişten alınır.