Her düşüşte işlem nasıl açılır?

 

Ö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);

     }

 

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);
 
Mustafa Damgaci #:

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?

 
Yaşar Sarı #:

Ç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

 
Mustafa Damgaci #:

MQL hakında hafta sonları  burada yardımcı olmaya çalışırım

Her hangi bir çözüm bulabildiniz mi?

 
Mustafa Damgaci #:

MQL hakında hafta sonları  burada yardımcı olmaya çalışırım

martingale veya grid expert kodlarına bakın orada birçok yol göreceksiniz bunu yapmak için

 
Yaşar Sarı #:

Her hangi bir çözüm bulabildiniz mi?

çözdüm demiştiniz başka nerede sorun var ?

 
Mustafa Damgaci #:

çözdüm demiştiniz başka nerede sorun var ?

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.

@Ahmet Metin Yilmaz

Hocam  sizde bakabilir misiniz dosyaya rica etsem?

Dosyalar:
 
#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
        }
     }
  }
 

Mustafa Damgaci #:


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