Başlangıç nasıl olacak, nezaman duracak bunlar daha var,
50 pip derken bu biraz karışık sanırım 50 tick kadar hareket farkı diye düşünüyorsun ama nereye göre
ilk önce
if (fark>50/point()) { buy() }
fark ise referansı olması gereki örneğin 1 dk önceki dakikalik kapanış la şimdiki kapanış karşılaştırırsın
fark = iClose(NULL,PERIOD_M1,1)-SymbolInfoDouble(NULL,SYMBOL_ASK);
Başlangıç nasıl olacak, nezaman duracak bunlar daha var,
50 pip derken bu biraz karışık sanırım 50 tick kadar hareket farkı diye düşünüyorsun ama nereye göre
ilk önce
fark ise referansı olması gereki örneğin 1 dk önceki dakikalik kapanış la şimdiki kapanış karşılaştırırsın
Çok teşekkür ederim sorunu çözdüm. Ancak anında yüzlerce işlem açıyordu, PositionsTotal()==0 komutunu ekledim bu kez sadece bir işlem veya kaç tane izin verirsem aynı seviyeden o kadar işlem açıyor. Ben kademeli işlem açtırmak istiyorum. örneğin:
ask-50 Buy
düşüş devam ederse yine 50 puanlık bir düşüşte de ek bir Buy işlemi açsın bu döngü sonsuza kadar gidecek sürekli 50 puanlık düşüşte ek Buy açacak bir adet bunu yapamıyorum yardımcı olabilir misiniz?
Çok teşekkür ederim sorunu çözdüm. Ancak anında yüzlerce işlem açıyordu, PositionsTotal()==0 komutunu ekledim bu kez sadece bir işlem veya kaç tane izin verirsem aynı seviyeden o kadar işlem açıyor. Ben kademeli işlem açtırmak istiyorum. örneğin:
ask-50 Buy
düşüş devam ederse yine 50 puanlık bir düşüşte de ek bir Buy işlemi açsın bu döngü sonsuza kadar gidecek sürekli 50 puanlık düşüşte ek Buy açacak bir adet bunu yapamıyorum yardımcı olabilir misiniz?
MQL hakında hafta sonları burada yardımcı olmaya çalışırım
Hocam Ask fiyatına -50 ekledim
if(ask-50); { islem.Buy(1,NULL,ask,0,ask+50,NULL);}
şeklinde ama örneğin 50 den sonra düşüş devam ederse her 50 puanlık düşüşte bir BUY işlemi daha açsın istiyorum ancak bunu yapamadım. Buylimit ile denedim yine olmadı doyayı eke ekledim bir bakabilir misiniz nerede hata yapıyorum.
Örneğin; 13000 seviyesinden 12500 seviyesine kadar sert bir düşüş oldu her 50 puanda bir tane BUY işlemi eklesin istiyorum yani 12500 seviyesinde her 50 puanlık düşüşte açılmış 9 açık BUY işlemi olmuş olacak.
Hatamı bulup yardımcı olursanız çok memnun olurum.
Hocam sizde bakabilir misiniz dosyaya rica etsem?
#include <Trade/Trade.mqh>
CTrade islem;
yukarıdaki kısım doğru mümkün oldğunca hazır
diğer kısımlar olmaz
önce akış diyagramı çizmelisin
1 koşul, koşul gerçekleşirse işlem
a- Buy yada sel var mı
2 işlem gerçekleşirse
a -parametreleri güncelle
b- yapılan işlem sayısı maksiumum işlemi aştımı ?
-----------------------
ontick sisteme her teklif verisi gelince işler sen on tick de değil de her yeni çubukta işlem yapmalısın örneğin 1 dk lık 5 dk lık vesaire..
bazen ontick te çok anormal sayıda tekrar işlem olur.
--------------------
işlem koşulu bu şekilde çalışmaz
ask sürekli değişir önce referans başlangıç lazım, bu başlangıcı oninit ie başlatabilirsin, veya örneğin
ayrıca 50 diye bir rakamda olmaz eurusd de nasdaqda paritelerde bu çalışmaz rakalmları Point() ile ilişkilendirmelisin eurusd 50 nasdaq ta 50 farklıdır.
vaktim olunca bunları detaylandırabilirim şimdi tesadüfen girdim gördüm kısa kodların şu şekilde olmalı
#include <Trade/Trade.mqh> CTrade islem; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double referans_fiyat, fark_fiyat; uint izin_verilen_islem_adedi = 3; double volume =0.01; void OnInit() { referans_fiyat = iOpen(NULL, PERIOD_D1, 0); // ilk referans // alternatif olarak // referans_fiyat = SymbolInfoDouble(NULL, SYMBOL_BID) // şimdiki fiyatttan başla } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnTick() { if(PositionsTotal() < izin_verilen_islem_adedi) { double ask = SymbolInfoDouble(NULL, SYMBOL_ASK); double bid = SymbolInfoDouble(NULL, SYMBOL_BID); fark_fiyat = referans_fiyat - ask; if(fark_fiyat > 50 / Point()) { //---------- bu alt kısım bu kadar basit değil // hesap durumunu yeterliliği risk kontrolleri yapmalısın // açağacın son işlem stopout olmana neden olabilir // islem.Buy(volume,NULL,ask,0,0); //------------- referans_fiyat = ask; // referans fiyat bundan sonraki işlemler için değişmeli } } }
yukarıdaki kısım doğru mümkün oldğunca hazır
diğer kısımlar olmaz
önce akış diyagramı çizmelisin
1 koşul, koşul gerçekleşirse işlem
a- Buy yada sel var mı
2 işlem gerçekleşirse
a -parametreleri güncelle
b- yapılan işlem sayısı maksiumum işlemi aştımı ?
-----------------------
ontick sisteme her teklif verisi gelince işler sen on tick de değil de her yeni çubukta işlem yapmalısın örneğin 1 dk lık 5 dk lık vesaire..
bazen ontick te çok anormal sayıda tekrar işlem olur.
--------------------
işlem koşulu bu şekilde çalışmaz
ask sürekli değişir önce referans başlangıç lazım, bu başlangıcı oninit ie başlatabilirsin, veya örneğin
ayrıca 50 diye bir rakamda olmaz eurusd de nasdaqda paritelerde bu çalışmaz rakalmları Point() ile ilişkilendirmelisin eurusd 50 nasdaq ta 50 farklıdır.
vaktim olunca bunları detaylandırabilirim şimdi tesadüfen girdim gördüm kısa kodların şu şekilde olmalı
referans_fiyat = ask; // referans fiyat bundan sonraki işlemler için değişmeli
Hocam burada anladığım kadarıyla ask'ı günlük açılış fiyatına tanımlamışsınız. Günlük açılıştan her 50 puanlık düşüşte işlem bir BUY işlemi açmasını istiyorum. Eğer ki ask'a yani günlük açılış fiyatından kademeli olarak -50, -100 -150 -200 -250 şeklinde Buy işlemi yapsam olmuş olur mu ? Ancak her düşüşte tek bir işlem açmak için PositionsTotal(0) eklemem mi gerekiyor?
Hesap ve risk kontrolü için elimde daha önceden kodlar vardı kaybettim şuan da aklıma da gelmiyor açıkçası. Expert sadece Nasdaq'da işlem yapacak onun için 50 puan diyordum.
void OnTick()
{
if(PositionsTotal() > izin_verilen_islem_adedi)
{
fark_fiyat = referans_fiyat - ask;
if(fark_fiyat > 50 / Point())
{
//---------- bu alt kısım bu kadar basit değil
// hesap durumunu yeterliliği risk kontrolleri yapmalısın
// açağacın son işlem stopout olmana neden olabilir
//
islem.Buy(volume,NULL,ask,0,ask+50);
//-------------
referans_fiyat = ask; // referans fiyat bundan sonraki işlemler için değişmeli
if(ask-100*Point())
{
islem.Buy(volume,NULL,ask,0,ask+50);
}
if(ask-150*Point())
{
islem.Buy(lot,NULL,ask,0,ask+50);
}
if(ask-200*Point())
{
islem.Buy(volume,NULL,ask,0,ask+50);
}
if(ask-250*Point())
{
islem.Buy(volume,NULL,ask,0,ask+50);
}
}
}
}
verdiğim kod tam olarak günlük açılışı baz alarak başlar ve işlem açtıktan sonra her düşüş te işlem açar
yani istediğini yapıyor sen en son yazdığın kod istediğini yapmaz.
bir kere Ontick de yürüyüyorsun işlemi Ontick() yeni Bid emri sisteme ulaştığı anda aktif olur o anda icra edilecek
Tek bir ask ve bid vardır. bu Event fonksiyonunda Ask- 50 ile Ask-100 diye bir birden fazla mantık yürütülemez ilk mantıksal ifade gerçekleştiğinde
yeni tick geldiğinde sürekli (ask-50) koşulu işleme girer ve if (ask-50 ) = true nasıl olur zaten o anda ask değişmiştir hiç bir zaman ask dan 50 düşük fiyat diye birşey olmaz
ama şu olabilir spread < ask-50 bu o andaki fiyatın makasının sana uygun olup olmadığını kontrol eder
yani Ontickte karşılaştıracağın rakam bir önceki ontick le gelip saklanmış bir fiyat olmalı
benim kod senin istediğini yapıyor
sadece limit emir eklemedim aşama aşama ilerlemelisin

- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Örneğin Nasdaq 12500 seviyesinde her 50 puan düşüşünde yeni bir buy işlemi açsın istiyorum. SL olmayacak sürekli her düşüşte açacak 50 pip TP şeklinde kendim çabaladım ancak yapamadım sanırım.
Benim yaptığım kodlama şu şekilde;
double ask = SymbolInfoDouble(NULL,SYMBOL_ASK);
double bid = SymbolInfoDouble(NULL,SYMBOL_BID);
if(ask-50)
{
islem.Buy(0.01,NULL,ask,0,ask+50,NULL);
}