Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 1415
Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım 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
"lot büyüklüğünü hesapla" için arama yapın: https://www.mql5.com/en/search#!keyword=calculate%20lotsize&module=mql5_module_forum
Elbette 0,9'u (1 - maxRisk) olarak değiştirebilir ve kullanıcı tarafından ayarlanabilen bir "% cinsinden Maksimum Risk" özelliği uygulayabilirsiniz.
Not: Forumda adınızı mı yoksa soyadınızı mı kullanıyorsunuz?Bilgi için teşekkürler. Bir ticaret robotunun geçmesi gereken kontrollerde, ticaret için kullanılacak marjın serbest marjdan (ACCOUNT_FREE_MARGIN) daha büyük olup olmadığını kontrol eden bir "CheckMoneyForTrade" yönteminden bahsedilir. Sizi doğru anladıysam, kullanılan fonların hesap bakiyesinin belirli bir yüzdesini aşıp aşmadığını da kontrol etmelisiniz, yani böyle bir şey:
Elbette 0,9'u (1 - maxRisk) olarak değiştirebilir ve kullanıcı tarafından ayarlanabilen bir "% cinsinden Maksimum Risk" özelliği uygulayabilirsiniz.
Not: Burada forumda ilk isim terimlerinde miyiz yoksa ilk isim terimlerinde miyiz?Herkes lot büyüklüğü konusunda tökezliyor ve burada çok fazla kod ve yorum var!
Şimdi William Roeder'ın MT5 için yazdıklarını bir araya getirdim, bu test edilmemiş(!!) işlev olacaktır:
(https://www.mql5.com/en/forum/133792/page3#comment_3405179 & https://www.mql5.com/en/forum/390088#comment_28092477)
Bir hata bulursanız lütfen bana bildirin!
Buradaki insanların çoğu bir şekilde takma adları veya ilk adlarıyla anonim olduklarından ve eskiden durum daha da böyle olduğundan, "Du" doğallaştı.
Kod için teşekkürler. Eksik olan tek şey geçerli bir ara lot boyutuna adaptasyondu:
Başka bir sorum daha var: Durdurulan bir işlemin kaybını TICK_VALUE ile veya yukarıdaki gibi deltaValue ile hesaplarsam, sonuç her zaman MQL5 dahili hesaplamasından biraz farklı olur:
Bunun nedeni EUR hesabı için ve piyasa fiyatı 1.0 ve piyasa fiyatı 1.2 için tik başına kayıp/kazancın farklı olması mı? Çünkü aşağıdaki koda örneğin fiyat yerine "fiyat + 0,1" ve sl yerine "sl + 0,1" girersem, tik mesafesi (fark) aynıdır, ancak OrderCalcProfit tarafından çıkarılan ilgili sonuçlar farklıdır. Ve manuel işlemlerden elde ettiğim kar/zararlara baktığımda, ikincisi doğrulanmış gibi görünüyor.
Eğer haklıysam, aşağıdaki kod daha doğru olacaktır:
Not: Temel fikir için tekrar teşekkürler: risk faktörünü bakiyeye değil, serbest marja bağlamak açıkça mantıklı.Aşagıdaki kod mql 5 in kendi uzmanı parabolic sar a göre oluşturulmuş. Ben burdaki alış sinyali ile satış sinyalinin çalışmasını terse çevirebilir miyim? Yani alış sinyali geldiğinde alış yerine satış açmasını istiyorum. yardımcıolabilecek var mı?
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link "https://www.mql5.com"
#property version "1.00"
//+------------------------------------------------------------------+
//| Include |
//+------------------------------------------------------------------+
#include <Expert\Expert.mqh>
//--- available signals
#include <Expert\Signal\SignalSAR.mqh>
//--- available trailing
#include <Expert\Trailing\TrailingNone.mqh>
//--- available money management
#include <Expert\Money\MoneyFixedLot.mqh>
//+------------------------------------------------------------------+
//| Inputs |
//+------------------------------------------------------------------+
//--- inputs for expert
input string Expert_Title ="sar"; // Document name
ulong Expert_MagicNumber =13831; //
bool Expert_EveryTick =false; //
//--- inputs for main signal
input int Signal_ThresholdOpen =10; // Signal threshold value to open [0...100]
input int Signal_ThresholdClose=10; // Signal threshold value to close [0...100]
input double Signal_PriceLevel =0.0; // Price level to execute a deal
input int Signal_Expiration =4; // Expiration of pending orders (in bars)
input double Signal_SAR_Step =0.02; // Parabolic SAR(0.02,0.2) Speed increment
input double Signal_SAR_Maximum =0.2; // Parabolic SAR(0.02,0.2) Maximum rate
input double Signal_SAR_Weight =1.0; // Parabolic SAR(0.02,0.2) Weight [0...1.0]
//--- inputs for money
input double Money_FixLot_Percent =10.0; // Percent
input double Money_FixLot_Lots =0.1; // Fixed volume
//+------------------------------------------------------------------+
//| Global expert object |
//+------------------------------------------------------------------+
CExpert ExtExpert;
//+------------------------------------------------------------------+
//| Initialization function of the expert |
//+------------------------------------------------------------------+
int OnInit()
{
//--- Initializing expert
if(!ExtExpert.Init(Symbol(),Period(),Expert_EveryTick,Expert_MagicNumber))
{
//--- failed
printf(__FUNCTION__+": error initializing expert");
ExtExpert.Deinit();
return(INIT_FAILED);
}
//--- Creating signal
CExpertSignal *signal=new CExpertSignal;
if(signal==NULL)
{
//--- failed
printf(__FUNCTION__+": error creating signal");
ExtExpert.Deinit();
return(INIT_FAILED);
}
//---
ExtExpert.InitSignal(signal);
signal.ThresholdOpen(Signal_ThresholdOpen);
signal.ThresholdClose(Signal_ThresholdClose);
signal.PriceLevel(Signal_PriceLevel);
signal.Expiration(Signal_Expiration);
//--- Creating filter CSignalSAR
CSignalSAR *filter0=new CSignalSAR;
if(filter0==NULL)
{
//--- failed
printf(__FUNCTION__+": error creating filter0");
ExtExpert.Deinit();
return(INIT_FAILED);
}
signal.AddFilter(filter0);
//--- Set filter parameters
filter0.Step(Signal_SAR_Step);
filter0.Maximum(Signal_SAR_Maximum);
filter0.Weight(Signal_SAR_Weight);
//--- Creation of trailing object
CTrailingNone *trailing=new CTrailingNone;
if(trailing==NULL)
{
//--- failed
printf(__FUNCTION__+": error creating trailing");
ExtExpert.Deinit();
return(INIT_FAILED);
}
//--- Add trailing to expert (will be deleted automatically))
if(!ExtExpert.InitTrailing(trailing))
{
//--- failed
printf(__FUNCTION__+": error initializing trailing");
ExtExpert.Deinit();
return(INIT_FAILED);
}
//--- Set trailing parameters
//--- Creation of money object
CMoneyFixedLot *money=new CMoneyFixedLot;
if(money==NULL)
{
//--- failed
printf(__FUNCTION__+": error creating money");
ExtExpert.Deinit();
return(INIT_FAILED);
}
//--- Add money to expert (will be deleted automatically))
if(!ExtExpert.InitMoney(money))
{
//--- failed
printf(__FUNCTION__+": error initializing money");
ExtExpert.Deinit();
return(INIT_FAILED);
}
//--- Set money parameters
money.Percent(Money_FixLot_Percent);
money.Lots(Money_FixLot_Lots);
//--- Check all trading objects parameters
if(!ExtExpert.ValidationSettings())
{
//--- failed
ExtExpert.Deinit();
return(INIT_FAILED);
}
//--- Tuning of all necessary indicators
if(!ExtExpert.InitIndicators())
{
//--- failed
printf(__FUNCTION__+": error initializing indicators");
ExtExpert.Deinit();
return(INIT_FAILED);
}
//--- ok
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Deinitialization function of the expert |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
ExtExpert.Deinit();
}
//+------------------------------------------------------------------+
//| "Tick" event handler function |
//+------------------------------------------------------------------+
void OnTick()
{
ExtExpert.OnTick();
}
//+------------------------------------------------------------------+
//| "Trade" event handler function |
//+------------------------------------------------------------------+
void OnTrade()
{
ExtExpert.OnTrade();
}
//+------------------------------------------------------------------+
//| "Timer" event handler function |
//+------------------------------------------------------------------+
void OnTimer()
{
ExtExpert.OnTimer();
}
//+------------------------------------------------------------------+
Şimdi sizin çözümünüz üzerinde çalışmak için zamanım oldu. Daha doğru (diğeri komisyon dikkate alındığı için daha temkinli?) ve MQ'daki demo hesabında altın ve gümüşte görülebileceği gibi görünüşe göre daha az hata eğilimli - Roboforex ile beklendiği gibi, çözümünüzden biraz daha temkinli:
MQ hesabında lot büyüklükleri çok yüksek olacaktır.
İşte iki yöntemi karşılaştırmak için senaryom:
Yönü in > sl (satın al) veya in < sl (sat) olarak türettim. O zaman bekleyen emirlerle ilgili herhangi bir sorun olmazdı
Testleriniz için teşekkür ederim. Evet, sonuçları birbiriyle karşılaştırırsanız, bir yandan OrderCalcProfit 'in tutarlılığını ve diğer yandan en azından EURUSD ve RoboForex için sonuçların yaklaşık "Lot büyüklüğü * CommissionPerLot" kadar farklı olduğunu görebilirsiniz. Bu eklenebilir:
Forum aramasını doğru kullandıysam, "CommissionPerLot" değerini doğrudan MQL5 kullanarak sorgulamanın bir yolu yok, değil mi?
Forum aramasını doğru kullandıysam, "CommissionPerLot" değerini doğrudan MQL5 kullanarak sorgulamanın bir yolu yok, değil mi?Evet, doğrudan terminalde değil, ancak komisyoncudan veya işlem geçmişinden talep edin: DEAL_COMMISSION.