MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 110
![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
Lütfen mevcut çiftte son 60 saniyede kapatılanemirlerin sayısını ve toplam kârını sayacak bir fonksiyon yazmama yardım edin. Dilimle doğru ifade edemiyorum.
double ClosingSellProfit= 0 , ClosingBuyProfit;
for ( int i= 0 ; i< OrdersHistoryTotal (); i++)
{
if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY ) && OrderSymbol ()== Symbol ())
{
}
}
Sanırım anlayacaksınız:
double GetProfitOldClosePos( string symb= "" , int type=- 1 , int mg=- 1 ) {
if (symb== "0" ) symb= Symbol ();
datetime gt= 0 ,ct= 0 ;
double pr= 0 ;
for ( int i= OrdersHistoryTotal ()- 1 ; i>= 0 ; i--) {
if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY )) {
if ( OrderSymbol ()==symb &&(type< 0 || OrderType ()==type)&& OrderMagicNumber ()==mg) {
ct= OrderCloseTime ();
// 120 секунд разницы между закрытием первой и последней в сетке
if ((gt<=ct && ct<=gt+ 120 ) || gt== 0 ) {
gt=ct;
pr+= OrderProfit ()+ OrderCommission ()+ OrderSwap ();
}}}}
return (pr);
}
Mevcut çiftte son 60 saniyede kapatılanemirlerin sayısını ve toplam kârını sayacak bir fonksiyon yazmama yardım et. Dilimle düzgün konuşamıyorum.
double ClosingSellProfit= 0 , ClosingBuyProfit;
for ( int i= 0 ; i< OrdersHistoryTotal (); i++)
{
if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY ) && OrderSymbol ()== Symbol ())
{
if ( OrderType ()== OP_SELL )
{
if (. . .)
{
CountClosedSellOrders++;
ClosingSellProfit+= OrderProfit ()+ OrderCommission ()+ OrderSwap ();
}
if ( OrderType ()== OP_BUY )
{
if (. . .)
{
CountClosedBuyOrders++;
ClosingBuyProfit+= OrderProfit ()+ OrderCommission ()+ OrderSwap ();
}
}
}
}
double ClosingSellProfit= 0 ,ClosingBuyProfit;
//for(int i=0; i<OrdersHistoryTotal(); i++)
for ( int i= OrdersHistoryTotal ()- 1 ;i>= 0 ;i--)
{
if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY ) && OrderSymbol ()== Symbol ())
{
if ( OrderCloseTime ()>= TimeCurrent ()- 60 )
{
if ( OrderType ()== OP_SELL )
{
CountClosedSellOrders++;
ClosingSellProfit+= OrderProfit ()+ OrderCommission ()+ OrderSwap ();
}
if ( OrderType ()== OP_BUY )
{
CountClosedBuyOrders++;
ClosingBuyProfit+= OrderProfit ()+ OrderCommission ()+ OrderSwap ();
}
}
}
}
Bir sipariş açarken takip eden bir durdurma nasıl belirlenir?
fiyat sıfırsa veya ayarlanmamışsa, son siparişin fiyatını çizgi koordinatı olarak atarız. Bununla her şey yolunda
Dergi de normaldir, olması gerektiği gibi hesabı birleştirir. Depozito eksikliği ile ilgili hatalar görmüyorum.
Ama hat hala kırmızı. Yani satın alma hattı diyoruz, doğru, parametreleri geçiyoruz, ancak diğerleri aktarılıyor.
Bu koşul kesinlikle kodunuzdaki gibi yazılmamalıdır. "Kahramanca" üstesinden gelmek için kendiniz için zorluklar yaratırsınız)))
Kodda kırmızı çizgiyi oluşturan her şey yorumlanır, bu nedenle onu başka biri oluşturur. Ya da kodun o kısmı çalıştığından beri grafikte asılı duruyor.
Her şeyi daha önce önerdiğim gibi tavsiye ediyorum - tüm eylemleri yazdırın ve günlükte (hata) kodları döndürün, bu birçok soruya cevap verecektir.
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit ()
{
//--- indicator buffers mapping
//---
return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//---
//--- return value of prev_calculated for next call
return (rates_total);
}
//+------------------------------------------------------------------+
Ancak çoğu gösterge için temel ilke şudur:
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//---
if (rates_total< 1 ) return ( 0 ); // проверка достаточности данных для расчёта индикатора, если не достаточно - выходим
// если для расчёта требуются некое количество баров слева от индекса цикла, ...
// ... то проверять нужно это количество, а не 1
//--- Действия для полного перерасчёта индикатора
int limit=rates_total-prev_calculated; // количество посчитанных уже баров
if (limit> 1 ) { // если количество больше 1, значит имеем новые данные, и нужно полностью пересчитать индикатор
limit=rates_total- 1 ; // задаём количество требуемых для расчёта баров равным количеству баров в истории,
// если для расчёта требуются некое количество баров слева от индекса цикла, ...
// ... то это количество тоже нужно вычесть из rates_total чтобы не выйти за пределы массива
// так же тут нужно при необходимости произвести инициализацию буферов индикатора
}
//--- Основной цикл индикатора
for ( int i=limit; i>= 0 ; i--) {
// тут выполняем нужные расчёты и записываем их результат в нужные буферы, например:
ExtMapBuffer[i]=(open[i]+high[i]+low[i]+close[i])/ 4.0 ; // Выведем на график среднюю цену каждой свечи (OHLC/4.0)
}
//--- return value of prev_calculated for next call
return (rates_total);
}
//+------------------------------------------------------------------+
Bu koşul kesinlikle kodunuzdaki gibi yazılmamalıdır. "Kahramanca" üstesinden gelmek için kendiniz için zorluklar yaratırsınız)))
Kodda kırmızı çizgiyi oluşturan her şey yorumlanır, bu nedenle onu başka biri oluşturur. Ya da kodun o kısmı çalıştığından beri grafikte asılı duruyor.
Her şeyi daha önce önerdiğim gibi tavsiye ediyorum - tüm eylemleri yazdırın ve günlükte (hata) kodları döndürün, bu birçok soruya cevap verecektir.
200 satırda mistisizm
:)
Şablonunuz tamamlanmadı - büyük olasılıkla sihirbazda hesaplanan verilerin yazılacağı gösterge arabelleklerini belirtmediniz.
Ancak çoğu gösterge için temel ilke şudur:
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//---
if (rates_total< 1 ) return ( 0 ); // проверка достаточности данных для расчёта индикатора, если не достаточно - выходим
// если для расчёта требуются некое количество баров слева от индекса цикла, ...
// ... то проверять нужно это количество, а не 1
//--- Действия для полного перерасчёта индикатора
int limit=rates_total-prev_calculated; // количество посчитанных уже баров
if (limit> 1 ) { // если количество больше 1, значит имеем новые данные, и нужно полностью пересчитать индикатор
limit=rates_total- 1 ; // задаём количество требуемых для расчёта баров равным количеству баров в истории,
// если для расчёта требуются некое количество баров слева от индекса цикла, ...
// ... то это количество тоже нужно вычесть из rates_total чтобы не выйти за пределы массива
// так же тут нужно при необходимости произвести инициализацию буферов индикатора
}
//--- Основной цикл индикатора
for ( int i=limit; i>= 0 ; i--) {
// тут выполняем нужные расчёты и записываем их результат в нужные буферы, например:
ExtMapBuffer[i]=(open[i]+high[i]+low[i]+close[i])/ 4.0 ; // Выведем на график среднюю цену каждой свечи (OHLC/4.0)
}
//--- return value of prev_calculated for next call
return (rates_total);
}
//+------------------------------------------------------------------+
Lütfen yardım et!
ABCDEF dizesi var, onu 3 satıra nasıl böleriz (dize değişkenine kaydedin):
AB
CD
EF
Lütfen yardım et!
ABCDEF dizesi var, onu 3 satıra nasıl böleriz (dize değişkenine kaydedin):
AB
CD
EF
string string_value, // строка
int start_pos, // с какой позиции начать
int length= 0 // длина извлекаемой строки
);