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
MQL4'te özel zaman girişi
MQL4 ile kullanıcı tarafından tanımlanan bir çubuktan başlayıp grafiğin sonuna kadar yatay bir çizgi çizebilen bir kod yazılabilir mi?
İşte Metastock ile aynı kod
Dy:=Input("Day",1,31,1);
Mn:=Input("Month",1,12,1);
Yr:=Input("Year",2000,2012,2010);
{Time Calculation}
Time:=Dy=DayOfMonth() AND Mn=Month() AND Yr=Year();
{Formula}
Start:= ValueWhen(1,Time,CLOSE);
{Output}
Start;Ve işte sonuç
Aynı şeyi MQL4 ile yapmayı umuyorum
Şu şekilde deneyin:
extern string startFrom = "2012.07.06 00:00";
int init() { return(0); }
int deinit() { ObjectDelete("hLine"); return(0); }
int start()
{
string name = "hLine";
int barShift = iBarShift(NULL,0,StrToTime(startFrom));
ObjectCreate(name,OBJ_TREND,0,0,0,0,0);
ObjectSet(name,OBJPROP_PRICE1,Close);
ObjectSet(name,OBJPROP_PRICE2,Close);
ObjectSet(name,OBJPROP_TIME1,Time);
ObjectSet(name,OBJPROP_TIME2,Time[0]);
return (0);
}Sadece kopyalayıp bir göstergeye yapıştırın (zaten çalışan bir göstergedir) ve grafiğe ekleyin.
MQL4 ile kullanıcı tarafından tanımlanan bir çubuktan başlayıp grafiğin sonuna kadar yatay bir çizgi çizebilen bir kod yazılabilir mi?
İşte Metastock ile aynı kod
Dy:=Input("Day",1,31,1);
Mn:=Input("Month",1,12,1);
Yr:=Input("Year",2000,2012,2010);
{Time Calculation}
Time:=Dy=DayOfMonth() AND Mn=Month() AND Yr=Year();
{Formula}
Start:= ValueWhen(1,Time,CLOSE);
{Output}
Start;Ve işte sonuç
Aynı şeyi MQL4 ile yapmayı umuyorumŞu şekilde deneyin:
extern string startFrom = "2012.07.06 00:00";
int init() { return(0); }
int deinit() { ObjectDelete("hLine"); return(0); }
int start()
{
string name = "hLine";
int barShift = iBarShift(NULL,0,StrToTime(startFrom));
ObjectCreate(name,OBJ_TREND,0,0,0,0,0);
ObjectSet(name,OBJPROP_PRICE1,Close);
ObjectSet(name,OBJPROP_PRICE2,Close);
ObjectSet(name,OBJPROP_TIME1,Time);
ObjectSet(name,OBJPROP_TIME2,Time[0]);
return (0);
}sen en iyisisin çok sağol mladen
Merhaba Mladen,
Buradaki fonksiyonların mantığı hakkında daha fazla bilgi verebilir misiniz? Hala tam olarak anlamıyorum. teşekkürler
teras
Bu işlevi deneyin:
{
int openedOrders = 0;
for(int i=0; i < OrdersTotal(); i++)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false) break;
if(OrderSymbol() != Symbol()) continue;
if(OrderMagicNumber() != MagicNumber) continue;
if(OrderType() == type) openedOrders++;
}
return(openedOrders);
}
[/PHP]
To count opened buy orders, call it like this :
to count opened sell orders, call it like this :
[PHP]int openedSells = countOpened(OP_SELL);tkuan77
Emirleri bir seferde 1 alış ve 1 satışla sınırlamak istediniz.
Yani herhangi bir pozisyon açmadan önce açılan emir sayacını ararsanız, kaç tane açık alış veya satışınız olduğunu kontrol edebilirsiniz.
Bir örnek :
Açılırsa, ui 0 dışında bir şeyse, yeni bir satın alma emri açmazsınız. Aynı mantık satmak için de geçerlidir (bu, o gönderideki ikinci örnektir)
Merhaba Mladen,
Buradaki fonksiyonların mantığı hakkında daha fazla bilgi verebilir misiniz? Hala tam olarak anlamıyorum. teşekkürler
terasMerhaba Mladen,
Belki de kendimi yanlış tanıtmış olabilirim. Yapmaya çalıştığım şey, satın alma kriterlerim karşılandığında, bir satın almayı tetikleyecek ve başka bir satın alma kriteri tekrar karşılanırsa, başka bir alım veya satış kriterleri karşılanırsa satmayı tetikleyecektir. Ancak, herhangi bir zamanda sahip olacağım maksimum ticaret 2 olacaktır.
Yönteminizi daha önce denedim ve hala aynı anda 2 işlem açan sistemle karşılaşıyorum, bu yüzden EA'nın aynı anda 2 işlem açması sorunuyla Bars işleviyle sınırlamaya çalıştım.
Buradaki olası sebep ne olabilir? Benim mantığımla alakası var mı?
Saygılarımızla
teras
tkuan77
Emirleri bir seferde 1 alış ve 1 satışla sınırlamak istediniz.
Yani herhangi bir pozisyon açmadan önce açılan emir sayacını ararsanız, kaç tane açık alış veya satışınız olduğunu kontrol edebilirsiniz.
Bir örnek :
Mevcut bir çubukta bir tür siparişin daha önce açılmış olup olmadığını kontrol edebilirsiniz ve bu şekilde bir sonraki onayda yeni bir sipariş açılmasını önlemiş olursunuz. Evet ise (mevcut bir çubukta açılmış bir emir vardı), o zaman yeni bir emir açılmıyor. Hayır ise, yeni bir sipariş açabilirsiniz. İşte mevcut bir barda açılan yeniden düzenlenmiş türdeki siparişleri sayabilen bir fonksiyon
{
int openedAtBar = 0;
datetime startTime = Time[0];
datetime endTime = Time[0]+Period()*60;
for(int i=0; i < OrdersTotal(); i++)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false) break;
if(OrderMagicNumber() != MagicNumber) continue;
if(OrderSymbol() != Symbol()) continue;
if(OrderType() != type) continue;
if(OrderOpenTime()=endTime) continue;
openedAtBar++;
break;
}
return(openedAtBar);
}
Merhaba Mladen,
Belki de kendimi yanlış tanıtmış olabilirim. Yapmaya çalıştığım şey, satın alma kriterlerim karşılandığında, bir alımı tetikleyecek ve başka bir satın alma kriteri tekrar karşılanırsa, başka bir alım veya satış kriterleri karşılanırsa satmayı tetikleyecektir. Ancak, herhangi bir zamanda sahip olacağım maksimum ticaret 2 olacaktır.
Yönteminizi daha önce denedim ve hala aynı anda 2 işlem açan sistemle karşılaşıyorum, bu yüzden EA'nın aynı anda 2 işlem açması sorunuyla Bars işleviyle sınırlamaya çalıştım.
Buradaki olası sebep ne olabilir? Benim mantığımla alakası var mı?
Saygılarımızla
terasMerhaba Mladen,
Belki de kendimi yanlış tanıtmış olabilirim. Yapmaya çalıştığım şey, satın alma kriterlerim karşılandığında, bir satın almayı tetikleyecek ve başka bir satın alma kriteri tekrar karşılanırsa, başka bir alım veya satış kriterleri karşılanırsa satmayı tetikleyecektir. Ancak, herhangi bir zamanda sahip olacağım maksimum ticaret 2 olacaktır.
Yönteminizi daha önce denedim ve hala aynı anda 2 işlem açan sistemle karşılaşıyorum, bu yüzden EA'nın aynı anda 2 işlem açması sorunuyla Bars işleviyle sınırlamaya çalıştım.
Buradaki olası sebep ne olabilir? Benim mantığımla alakası var mı?
Saygılarımızla
terasbunun nedeni, ikinci ticaretin ilkinden nasıl farklı olmasını istediğinizi belirtmemiş olmanızdır. Farklılaşma x no şeklinde olabilir. çubuklar veya FirstBuyPrice'dan uzaktaki fiyat.
Yardımın için teşekkürler Mladen, ancak sadece seninle kontrol etmek istiyorum, kodu uzun/kısa işlevimden önce mi, arada mı yoksa başka bir yere mi koymalıyım? Çünkü hata vermeye devam ediyor gibi görünüyor ve bunun kaynağını bulamıyorum. Ve MagicNumber bir tamsayı mı?
teras
toplam = SiparişlerToplam();
if(toplam < 2)
{
int countOpenedOnACurrentBar(int tipi)
{
int openAtBar = 0;
tarihsaat startTime = Saat[0];
datetime endTime = Time[0]+Period()*60;
for(int i=0; i < OrdersTotal(); i++)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false) break;
if(OrderMagicNumber() != MagicNumber) devam ediyor;
if(OrderSymbol() != Symbol()) devam ediyor;
if(OrderType() != type) devam et;
if(OrderOpenTime()=endTime) devam ediyor;
açıldıAtBar++;
kırmak;
}
dönüş(openedAtBar);
}
if(isCrossed == 1 && shortEma > mainshortEma && longEma > mainshortEma)
{
bilet=SiparişGönder(Symbol(),OP_BUY,Lots,Sor,1,Ask-StopLoss*Puan,Ask+TakeProfit*Puan,
"EA'm",12345,0,Yeşil);
if(bilet>0)
{
if(OrderSelect(bilet,SELECT_BY_TICKET,MODE_TRADES))
Print("Satın alma emri açıldı : ",OrderOpenPrice());
}
else Print("SATIN AL emri açılırken hata oluştu : ",GetLastError());
dönüş(0);
}
if(isCrossed == 2 && shortEma < mainshortEma && longEma < mainshortEma)
{
bilet=SiparişGönder(Symbol(),OP_SELL,Lots,Bid,1,Teklif+StopLoss*Puan,Teklif-AlKar*Puan,
"EA'm",12345,0,Kırmızı);
if(bilet>0)
{
if(OrderSelect(bilet,SELECT_BY_TICKET,MODE_TRADES))
Print(" SAT emri açıldı : ",OrderOpenPrice());
}
else Print("SATIŞ emrini açarken hata: ",GetLastError());
dönüş(0);
}
dönüş(0);
}
Mevcut bir çubukta bir tür siparişin daha önce açılmış olup olmadığını kontrol edebilirsiniz ve bu şekilde bir sonraki onayda yeni bir sipariş açılmasını önlemiş olursunuz. Evet ise (mevcut bir çubukta açılmış bir emir vardı), o zaman yeni bir emir açılmıyor. Hayır ise, yeni bir sipariş açabilirsiniz. İşte mevcut bir barda açılan yeniden düzenlenmiş türdeki siparişleri sayabilen bir fonksiyon
{
int openedAtBar = 0;
datetime startTime = Time[0];
datetime endTime = Time[0]+Period()*60;
for(int i=0; i < OrdersTotal(); i++)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false) break;
if(OrderMagicNumber() != MagicNumber) continue;
if(OrderSymbol() != Symbol()) continue;
if(OrderType() != type) continue;
if(OrderOpenTime()=endTime) continue;
openedAtBar++;
break;
}
return(openedAtBar);
}
...
teras
Bu bir fonksiyondur . EA'nızın sonuna gönderin ve mevcut bir barda bir siparişin zaten açık olup olmadığını kontrol etmenin uygun olduğunu düşündüğünüz yere çağrılar yapın.
Yardımın için teşekkürler Mladen, ancak sadece seninle kontrol etmek istiyorum, kodu uzun/kısa işlevimden önce mi, arada mı yoksa başka bir yere mi koymalıyım? Çünkü hata vermeye devam ediyor gibi görünüyor ve bunun kaynağını bulamıyorum. Ve MagicNumber bir tamsayı mı?
teras
toplam = SiparişlerToplam();
if(toplam < 2)
{
int countOpenedOnACurrentBar(int tipi)
{
int openAtBar = 0;
tarihsaat startTime = Saat[0];
datetime endTime = Time[0]+Period()*60;
for(int i=0; i < OrdersTotal(); i++)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false) break;
if(OrderMagicNumber() != MagicNumber) devam ediyor;
if(OrderSymbol() != Symbol()) devam ediyor;
if(OrderType() != type) devam et;
if(OrderOpenTime()=endTime) devam ediyor;
açıldıAtBar++;
kırmak;
}
dönüş(openedAtBar);
}
if(isCrossed == 1 && shortEma > mainshortEma && longEma > mainshortEma)
{
bilet=SiparişGönder(Symbol(),OP_BUY,Lots,Sor,1,Ask-StopLoss*Puan,Ask+TakeProfit*Puan,
"EA'm",12345,0,Yeşil);
if(bilet>0)
{
if(OrderSelect(bilet,SELECT_BY_TICKET,MODE_TRADES))
Print("Satın alma emri açıldı : ",OrderOpenPrice());
}
else Print("SATIN AL emri açılırken hata oluştu : ",GetLastError());
dönüş(0);
}
if(isCrossed == 2 && shortEma < mainshortEma && longEma < mainshortEma)
{
bilet=SiparişGönder(Symbol(),OP_SELL,Lots,Bid,1,Teklif+StopLoss*Puan,Teklif-AlKar*Puan,
"EA'm",12345,0,Kırmızı);
if(bilet>0)
{
if(OrderSelect(bilet,SELECT_BY_TICKET,MODE_TRADES))
Print("SAT emri açıldı : ",OrderOpenPrice());
}
else Print("SATIŞ emrini açarken hata: ",GetLastError());
dönüş(0);
}
dönüş(0);
}