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
Tümünü Kapat Zaman Filtresi için bir çözüm sıraladım
Dış Değişkenler
extern string timefilter="Time Filter";
extern int gmtshift=1; // gmt offset of the broker
extern bool generalfilter=false; // enable time filter
extern int starthour=7; // start hour to trade after this hour
extern int startminutes=0; // minutes of the start hour
extern int endhour=21; // stop to trade after this hour
extern int endminutes=0; // minutes of the start hour
extern bool tradesunday=true; // trade on sunday
extern bool fridayfilter=false; // enable special time filter on friday
extern int fridayhour=21; // stop to trade after this hour
extern int fridayminutes=0; // minutes of the friday hour
[/CODE]
string istarthour,istartminutes,iendhour,iendminutes,ifridayhour,ifridayminutes;
datetime tstart,tend,tfriday;[/CODE]
Place Code in Start,
[CODE] if(generalfilter){
nstarthour=starthour+(gmtshift);if(nstarthour>23)nstarthour=nstarthour-24;
if(nstarthour<10)istarthour="0"+nstarthour;
if(nstarthour>9)istarthour=nstarthour;
if(startminutes<10)istartminutes="0"+startminutes;
if(startminutes>9)istartminutes=startminutes;
tstart=StrToTime(istarthour+":"+istartminutes);
nendhour=endhour+(gmtshift);if(nendhour>23)nendhour=nendhour-24;
if(endhour<10)iendhour="0"+nendhour;
if(endhour>9)iendhour=nendhour;
if(endminutes<10)iendminutes="0"+endminutes;
if(endminutes>9)iendminutes=endminutes;
tend=StrToTime(iendhour+":"+iendminutes);
}
if(fridayfilter){
nfridayhour=fridayhour+(gmtshift);if(nfridayhour>23)nfridayhour=nfridayhour-24;
if(nfridayhour<10)ifridayhour="0"+nfridayhour;
if(nfridayhour>9)ifridayhour=nfridayhour;
if(fridayminutes<10)ifridayminutes="0"+fridayminutes;
if(fridayminutes>9)ifridayminutes=fridayminutes;
tfriday=StrToTime(ifridayhour+":"+ifridayminutes);
}
if((generalfilter && (nstarthour<nendhour && TimeCurrent()tend) || (nstarthour>nendhour && TimeCurrent()tend))
|| (tradesunday==false && DayOfWeek()==0) || (fridayfilter && DayOfWeek()==5 && TimeCurrent()>tfriday))
{
CloseAll();
Comment("Non-trading Hours All Positions Closed");
return(0);
}and the CloseAll function.
[CODE]
void CloseAll(){
int total = OrdersTotal();
for(int i=total-1;i>=0;i--){
OrderSelect(i, SELECT_BY_POS);
int type = OrderType();
bool result = false;
switch(type){
//Close opened long positions
case OP_BUY : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, Lime); break;
//Close opened short positions
case OP_SELL : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5, LightGreen );
} if(result == false){
Alert("Order " , OrderTicket() , " failed to close. Error:" , GetLastError() );
Sleep(3000);
}
}
return(0);
}
ipuçları ve püf noktaları için teşekkürler Kalenzo
Kaybı durdurmak
günaydın
İşlem başına maksimum dd ve yüzde onay değerine dayalı bir SL hesaplamak için bir deney deniyorum.
double lotSize = NormalizeDouble(Kellylot(),2);
double Pip = Point;
if(Digits==3 || Digits==5) Pip = 10*Point;
double Bal = AccountBalance(); // $1000
double TV = MarketInfo(Symbol(), MODE_TICKVALUE); // $1
double Risk = 2; // 2%
double MaxDD = 10; // 10%
double RiskCapital = Bal*MaxDD/100; // Total Exposure 10% of $1000 = $100
double RPT = Bal*Risk/100; // 2% of $1000 = $20
double stopLoss = NormalizeDouble(RPT/TV*lotSize/Pip,Digits); //$20/1*0.01/10 = 0.02000
double Positions = MathAbs(RiskCapital/RPT); // Maximum 5 positions 100 / 20
Buradaki fikir, çifte ve çiftlere bağlı olarak bireysel onay değeri ve lot boyutuna bağlı olarak %2 sl'nin ayarlanabilmesidir.
Bence doğru ama mümkünse birinin kontrol etmesini istiyorum.
günaydın
İşlem başına maksimum dd ve yüzde onay değerine dayalı bir SL hesaplamak için bir deney deniyorum.
double lotSize = NormalizeDouble(Kellylot(),2);
double Pip = Point;
if(Digits==3 || Digits==5) Pip = 10*Point;
double Bal = AccountBalance(); // $1000
double TV = MarketInfo(Symbol(), MODE_TICKVALUE); // $1
double Risk = 2; // 2%
double MaxDD = 10; // 10%
double RiskCapital = Bal*MaxDD/100; // Total Exposure 10% of $1000 = $100
double RPT = Bal*Risk/100; // 2% of $1000 = $20
double stopLoss = NormalizeDouble(RPT/TV*lotSize/Pip,Digits); //$20/1*0.01/10 = 0.02000
double Positions = MathAbs(RiskCapital/RPT); // Maximum 5 positions 100 / 20
Buradaki fikir, çifte ve çiftlere bağlı olarak bireysel onay değeri ve lot boyutuna bağlı olarak %2 sl'nin ayarlanabilmesidir.
Bence doğru ama mümkünse birinin kontrol etmesini istiyorum.İyi iş Beno,
Olta vermek balık vermekten her zaman daha iyidir. Yorumlarınızla yardımcı olabildiğim için çok mutluyum.
Stoploss'a gelince, fikir iyidir, ancak bunu tersten de düşünmeye çalışın:
ilk set durdurma kaybı
ikinci olarak ticaret boyutunu ayarla
Bu şekilde sistem giriş/çıkışlarını piyasa koşullarına uydurursunuz ve hesabınızdan %X'ten fazla risk almazsınız ancak çıkış, risk yüzdesi yerine sistem mantığına bağlı olacaktır.
İyi iş Beno,
Olta vermek balık vermekten her zaman daha iyidir. Yorumlarınızla yardımcı olabildiğim için çok mutluyum.
Stoploss'a gelince, fikir iyidir, ancak bunu tersten de düşünmeye çalışın:
ilk set durdurma kaybı
ikinci olarak ticaret boyutunu ayarla
Bu şekilde sistem giriş/çıkışlarını piyasa koşullarına uydurursunuz ve hesabınızdan %X'ten fazla risk almazsınız ancak çıkış, risk yüzdesi yerine sistem mantığına bağlı olacaktır.Gidday Kalenzo
SATIŞ emrini açarken hata alıyorum: EA demo ve canlı hesaptayken geçersiz duraklar ve hiçbir işlem açılmıyor. ancak test cihazında iyi çalışıyor ve hata mesajı yok.
EURUSD,Günlük: 1'i değiştir 1.43348 sl'de 0.01 EURUSD satın al: 1.43895 tp: 0.00000 tamam
SL 0.00547 puan farkı
kontrol ettim
MODE_FREEZEEVEL 0.0000
MODE_STOPLEVEL 0.0000
double Bal = AccountFreeMargin();
double TV = MarketInfo(Symbol(), MODE_TICKVALUE);
double Risk = 0.3;
double MaxDD = 10;
double RiskCapital = Bal*MaxDD/100;
double RPT = Bal*Risk/100;
double stopLoss = NormalizeDouble((RPT/TV)*lotSize/pips2dbl,Digits);
double Positions = MathAbs(RiskCapital/RPT);
double SL;
//---- sell conditions
if(sellsig && ttime!=Time[0]){
double bid = NormalizeDouble(Bid, Digits);
SL = NormalizeDouble(Bid + stopLoss * pips2dbl, Digits);
res=OrderSend(symbol,OP_SELL,lotSize,bid,slippage * pips2dbl,SL,0,"Pivot_Sell",SpecificMagic,0,Red);
if( res<0 )
{
Print("Error opening SELL order : ",ErrorDescription(GetLastError()));
Print("Bid=" + DoubleToStr(bid,Digits) + " : SL=" + DoubleToStr(SL,Digits));
res=0;
}
else //now enter in the SL and TP via OrderModify to make compatible with ECN broker
{
if (OrderSelect(res, SELECT_BY_TICKET))
{
if (!OrderModify(res, Bid, SL, 0, 0, Red))
Print("Error modifying order");
}
}
ttime=Time[0];
return;
}
//---- buy conditions
if(buysig && ttime!=Time[0]) {
double ask = NormalizeDouble(Ask, Digits);
SL = NormalizeDouble(Ask - stopLoss * pips2dbl, Digits);
res=OrderSend(symbol,OP_BUY,lotSize,ask,slippage * pips2dbl,SL,0,"Pivot Buy",SpecificMagic,0,Blue);
if( res<0 )
{
Print("Error opening BUY order : ",ErrorDescription(GetLastError()));
Print("Ask=" + DoubleToStr(ask,Digits) + " : SL=" + DoubleToStr(SL,Digits));
res=0;
}
else //now enter in the SL and TP via OrderModify to make compatible with ECN broker
{
if (OrderSelect(res, SELECT_BY_TICKET))
{
if (!OrderModify(res, Ask, SL, 0, 0, Blue))
Print("Error modifying order");
}
}
ttime=Time[0];
return;
}
}Buna daha önce hiç rastlamadım.
Şerefe
Beno
Kilitle/Kilitle Aç işlevi
mq4'te mandallama/açma işlevini kodlamanın bir yolu var mı? Bir koşula dayalı olarak biraz doğru kilitlersiniz ve bu değeri başka bir koşul tarafından çözülene kadar saklar.
cmfxtrader
Gidday Kalenzo
SAT emri açarken hata alıyorum: EA demo ve canlı hesaptayken geçersiz duraklar ve hiçbir işlem açılmıyor. ancak test cihazında iyi çalışıyor ve hata mesajı yok.
EURUSD,Günlük: 1'i değiştir 1.43348 sl'de 0.01 EURUSD satın al: 1.43895 tp: 0.00000 tamam
SL 0.00547 puan farkı
kontrol ettim
MODE_FREEZEEVEL 0.0000
MODE_STOPLEVEL 0.0000
double Bal = AccountFreeMargin();
double TV = MarketInfo(Symbol(), MODE_TICKVALUE);
double Risk = 0.3;
double MaxDD = 10;
double RiskCapital = Bal*MaxDD/100;
double RPT = Bal*Risk/100;
double stopLoss = NormalizeDouble((RPT/TV)*lotSize/pips2dbl,Digits);
double Positions = MathAbs(RiskCapital/RPT);
double SL;
//---- sell conditions
if(sellsig && ttime!=Time[0]){
double bid = NormalizeDouble(Bid, Digits);
SL = NormalizeDouble(Bid + stopLoss * pips2dbl, Digits);
res=OrderSend(symbol,OP_SELL,lotSize,bid,slippage * pips2dbl,SL,0,"Pivot_Sell",SpecificMagic,0,Red);
if( res<0 )
{
Print("Error opening SELL order : ",ErrorDescription(GetLastError()));
Print("Bid=" + DoubleToStr(bid,Digits) + " : SL=" + DoubleToStr(SL,Digits));
res=0;
}
else //now enter in the SL and TP via OrderModify to make compatible with ECN broker
{
if (OrderSelect(res, SELECT_BY_TICKET))
{
if (!OrderModify(res, Bid, SL, 0, 0, Red))
Print("Error modifying order");
}
}
ttime=Time[0];
return;
}
//---- buy conditions
if(buysig && ttime!=Time[0]) {
double ask = NormalizeDouble(Ask, Digits);
SL = NormalizeDouble(Ask - stopLoss * pips2dbl, Digits);
res=OrderSend(symbol,OP_BUY,lotSize,ask,slippage * pips2dbl,SL,0,"Pivot Buy",SpecificMagic,0,Blue);
if( res<0 )
{
Print("Error opening BUY order : ",ErrorDescription(GetLastError()));
Print("Ask=" + DoubleToStr(ask,Digits) + " : SL=" + DoubleToStr(SL,Digits));
res=0;
}
else //now enter in the SL and TP via OrderModify to make compatible with ECN broker
{
if (OrderSelect(res, SELECT_BY_TICKET))
{
if (!OrderModify(res, Ask, SL, 0, 0, Blue))
Print("Error modifying order");
}
}
ttime=Time[0];
return;
}
}Buna daha önce hiç rastlamadım.
Şerefe
BenoMuhtemelen stop kaybınız çok yakındır. Stoploss değerini 10 ile çarpmaya çalışın. Sistemi 4 haneli broker üzerinde test ederken ve 5 haneli broker üzerinde işlem yapıyorsanız bu sık görülen bir problemdir. Ayrıca 5 basamaklı komisyoncu üzerinde test edebilirsiniz, ancak komisyoncuya asla bağlanmayın (çevrimdışı modda) ve ardından meta tüccar eski ayarlara sahip olacaktır (4 kazıdan).
İlk önce bu satırdan:
NormalizeDouble(Ask - stopLoss * pips2dbl, Rakamlar);
Bu değeri yazdır => stopLoss*pips2dbl
o zaman zararı durdurmanın gerçek değerini bileceksiniz.
20 veya 10 gibi olacaksa, bunu Puan değeriyle çarpmanız gerektiği anlamına gelir.
NormalizeDouble(Sor - (stopLoss * pips2dbl) *Puan, Rakamlar);
0.00009 gibi olacaksa, o zaman sadece 10 ile çarpmanız gerekir çünkü 0.0009 olmalıdır (tabii ki 9 pip stop loss ayarlamak istiyorsanız)
mq4'te mandallama/açma işlevini kodlamanın bir yolu var mı? Bir koşula dayalı olarak biraz doğru kilitlersiniz ve bu değeri başka bir koşul tarafından çözülene kadar saklar. cmfxtrader
Seni doğru anladığımdan emin değilim. ea'nın ( işlev ) belirli bir bölümünü açmak/kapatmak mı istiyorsunuz yoksa ea B'de gerçekleştirilen işlemle işlevi ea A'dan mı devre dışı bırakmak istiyorsunuz? Şu veya bu şekilde, her ikisi de mümkündür.
Para değerini fiyata dönüştürün (kar hedefi hesaplaması için)
Bir esnaf sepetinin belirli bir kar hedefi için bir fiyat değeri döndüren bir fonksiyon programlamak istiyorum, ancak güçlük çekiyorum. Ulaşmak istediğim hedef, kar hedefini gösteren, ekrana çizilecek basit bir yatay çizgidir . Ancak kâr hedefi, fiyat değeri değil, para değeri şeklinde kullanıcı tarafından tanımlanabilen bir değişkendir. (örneğin hedef = hedef = 1.2000 yerine 100 €)
Şimdiye kadar sahip olduğum rutin:
(Hesabım EUR cinsindendir!)
1) Diyelim ki USDJPY için birkaç alış pozisyonu açtım (örnek bir durum yaratmak adına rastgele pozisyonlarda)
2) Sepetin ortalama açılış fiyatını hesaplıyorum (yine varsayımsal olarak 1.1500 diyelim) ve bunu belirtmek için yatay bir çizgi gösteriyorum
3) Kar hedefi ayarlanmış bir değişkenim var: diyelim ki hedef = 100 €
4) Sepet kar >= hedef olduğunda tüm açık pozisyonları başarıyla kapatabilirim
Aradaki adım eksik. Bir fonksiyona ihtiyacım var: hedefFiyat değerini döndüren double targetPrice(){}. Sorun yatay çizgiyi çizmek değil: targetPrice'ı hesaplamak!
targetPrice = ortalama açık fiyat + para-değer hedefi (100€)
Temel olarak bilmek istediğim şey: bir para-değerini pip'e nasıl çevirebilirim . Bu şekilde ortalama fiyata pip ekleyebilirim ve işte benim hedef Fiyatım var. Bunun ayrıca bir EUR hesabım olduğu ve USDJPY ile işlem yaptığım gerçeğini de hesaba katması gerektiğini unutmayın. Sanırım orada da tuzaklar var?
ECN SL çalışmıyor
günaydın
Bir ECN üzerinde çalışacak bir EA kurmaya çalışıyorum, SL ve TP'nin yerleştirilmesi / değiştirilmesi gerektiğini anlıyorum ve kurulumun doğru olduğunu düşünüyorum, sipariş şimdi açılıyor ancak SL harici çift StopLoss yerleştirilmiyor = 100; herhangi bir yardım harika olurdu.
if(buysig && ttime!=Time[0]) {
ticket = OrderSend(Symbol(), OP_BUY, lotSize, MarketInfo(Symbol(), MODE_ASK), 2, 0, 0, "", 12345);
if(ticket > -1){
if (!OrderSelect(ticket, SELECT_BY_TICKET)) {
error_code = GetLastError();
Print("Error: " + ErrorDescription(error_code));
return(-1);
}
Print("order "+ticket+" successfully opened");
//now enter in the SL and TP via OrderModify to make compatible with ECN broker
SL = MarketInfo(Symbol(), MODE_ASK) - (StopLoss * pips2points);
Print("Ask = " + DoubleToStr(Ask,Digits) + " : SL = " + DoubleToStr(SL,Digits));
//round to nearest Tickvalue
SL = DoubleRound(SL, MarketInfo(Symbol(), MODE_TICKSIZE));
Print("SL rounded: " + SL);
if(!OrderModify(ticket, entry_price, SL, 0, Blue)) {
error_code = GetLastError();
Print("Error: " + ErrorDescription(error_code));
return(-1);
}
Print("Stoploss successfully set");
ttime=Time[0];
return(0);
}
}
}
//Tickvalue Rounding
double DoubleRound(double number, double step){
double mod = MathMod(number, step);
if(mod < step/2.0)
step = 0;
double rounded = number - mod + step;
return (rounded);
},,,,,,,,,,,.,,,,,,,,