Izgara oluşturucu 1.1 - sayfa 3

 
tekrar merhaba

cevabın için teşekkürler eve gidince eklerim
 
Bu kodun bazen ızgarayı mükemmel tutma sorunları olduğunu görüyorum (en azından onu bir geri çekilme ızgarası olarak çalıştırdığımda). Deliklerin oluştuğunu ve güncellenmediğini gördüm ve 10 siparişin hepsinde zaman zaman ızgaranın tam olarak oluşmadığını gördüm. Ayrıca, çok kısa olan güncelleme süresi ayarlarından hoşlanmıyor gibi görünüyor ve nedenini anlamıyorum. Görünüşe göre 15 dakika bir ızgarayı güncellemek için çok uzun (daha çok 15 saniye gibi!), bu yüzden bu büyük bir sorun. Bunlardan herhangi birini deneyimleyen varsa bilgilendirirse sevinirim. Bununla birlikte, bunu devam ettirmek için harika bir iş. İyi iş.
 
soma,

Haklısın, birinin bana işaret ettiği ve düzeltilmiş gibi görünen bir hata vardı. işte yeni sürüm. Aralığı da 1 dakika olarak değiştirdim - ama bence 15 ila 30 dakika daha iyi.. piyasa çok hızlı hareket ettiğinde birkaç karşı ticaretten kaçınacaktır.

Saygılarımızla,

//+------------------------------------------- -------------------+
//| MakeGrid.mq4 |
//| Telif hakkı © 2005, hdb |
//| http://www.dubois1.net/hdb |
//+------------------------------------------- -------------------+
#property telif hakkı "Telif hakkı © 2005, hdb"
#özellik bağlantısı "http://www.dubois1.net/hdb"
//#özellik sürümü "1.4beta"

harici string GridName = "Izgara"; // ızgarayı tanımlar. birlikte var olan birkaç ızgaraya izin verir
dış çift Lot = 0.1; // 
dış çift GridSize = 6; // siparişler arasındaki pip - ızgara veya ağ boyutu
harici çift GridSteps = 12; // verilecek toplam sipariş sayısı
harici çift TakeProfit = 6 ; // kar elde etmek için tik sayısı. normalde = ızgara boyutudur, ancak geçersiz kılabilirsiniz
harici çift StopLoss = 0; // eğer bir stoploss eklemek istiyorsanız. normal şebekeler durdurma kayıplarını kullanmaz
harici çift UpdateInterval = 1; // siparişleri her x dakikada bir güncelle
extern bool wantLongs = true; // uzun pozisyonlar istiyor muyuz
extern bool WantShorts = true; // kısa pozisyonlar istiyor muyuz
extern bool istiyorBreakout = true; // uzunları fiyatın üstünde, şortları fiyatın altında mı istiyoruz
extern bool requestCounter = true; // uzunları fiyatın altında, şortları fiyatın üstünde mi istiyoruz
harici bool limitiEMA34 = yanlış; // uzunları sadece ema'nın üstünde, şortları sadece ema'nın altında mı istiyoruz
harici çift LastUpdate = 0; // son güncellemenin zamanını not etmek için kullanılan sayaç
harici çift GridMaxOpen = 0; // maksimum açık pozisyon sayısı
//+------------------------------------------- -------------------+
//| uzman başlatma işlevi |
//+------------------------------------------- -------------------+
int init()
  {
//---- 
 #property show_inputs // parametreleri gösterir - teşekkürler Slawa...    
 if ( TakeProfit <= 0 ) // 
   { TakeProfit = GridSize; }
//----
   dönüş(0);
  }
//+------------------------------------------- -------------------------+
//| atRate | bölgesinde açık bir pozisyon veya emir olup olmadığını test eder.
//| checkLongs doğruysa uzunları kontrol eder, aksi takdirde kontrol eder |
//| şortlar için |
//+------------------------------------------- -------------------------+

bool IsPosition(double atRate, double inRange, bool checkLongs )
  {
  
     int toplam siparişler = SiparişlerToplam();
     for(int j=0;j<totalorders;j++) // tüm emirleri ve pozisyonları tara...
      {
        OrderSelect(j, SELECT_BY_POS);
        if ( OrderSymbol()==Symbol() && OrderComment() == GridName ) // sadece mygrid ve sembol olup olmadığına bakın...
         { int type = OrderType();
            if (MathAbs( OrderOpenPrice() - atRate ) < inRange) // tam fiyatı değil fiyat yakınlığını arayın (ızgara boyutundan küçük)
              { if ( ( checkLongs && ( type == OP_BUY || type == OP_BUYLIMIT || type == OP_BUYSTOP ) ) || (!checkLongs && ( type == OP_SELL || type == OP_SELLLIMIT || type == OP_SELLSTOP ) ) )
                 { 
                    dönüş(doğru); 
                 }
              }
         }
      } 

   dönüş(yanlış);
  }
//+------------------------------------------- -------------------+
//| komut dosyası programı başlatma işlevi |
//+------------------------------------------- -------------------+
int başlangıç()
  {
//---- 
   int i, j,k, bilet, entermode, toplam siparişler;
   bool doit;
   çift nokta, başlangıç oranı, ticaret oranı;
 
//----
  if (MathAbs(CurTime()-LastUpdate)> UpdateInterval*60) // ilk çağrıldığında ve her UpdateInterval dakikasında güncelliyoruz
   {
   LastUpdate = CurTime();
   Print("Güncelleniyor");
   nokta = MarketInfo(Symbol(),MODE_POINT);
   başlangıç hızı = ( Sor + nokta*GridSize/2 ) / nokta / GridSize; // GridSize tarafından bölünebilen bir dizi onay işaretine yuvarlama
   k = başlangıç hızı;
   k = k * IzgaraBoyutu ;
   başlangıç hızı = k * nokta - GridSize*GridSteps/2*point ; // en düşük giriş noktasını hesapla
   
   double EMA34=iMA(NULL,0,34,0,MODE_EMA,PRICE_CLOSE,0);
   
   for( i=0;i<GridSteps;i++)
   {
     ticaret oranı = başlangıç hızı + i*nokta*GridSize;
     
     if ( wantLongs && (!limitEMA34 || ticari işlem > EMA34))
       {
         if ( IsPosition(traderate,point*GridSize,true) == false ) // fiyatıma yakın açık emrim olup olmadığını test edin: öyleyse, bir tane koyun
          {
            çift myStopLoss = 0;
             if (StopLoss > 0 )
               { myStopLoss = ticaret oranı noktası*StopLoss ; }
               
             if ( takas > Sor ) 
              { entermode = OP_BUYSTOP; } 
              başka 
              { entermode = OP_BUYLIMIT; } 
              
              if ( ((traderate > Sor ) && (wantBreakout)) || ((traderate <= Ask ) && (wantCounter)) ) 

              { 
                  bilet=OrderSend(Symbol(),entermode,Lots,traderate,0,myStopLoss,traderate+point*TakeProfit,GridName,16384,0,Green); 
   
             }
          }
       }

     if ( wantShorts && (!limitEMA34 || ticaret oranı < EMA34))
       {
         if (IsPosition(traderate,point*GridSize,false)== false ) // fiyatıma yakın açık siparişim olup olmadığını test edin: öyleyse, bir tane koyun
          {
             myStopLoss = 0;
             if (StopLoss > 0 )
               { myStopLoss = ticaret oranı+puan*StopLoss ; }
             if ( ticaret > Teklif ) 
              { entermode = OP_SELLLIMIT; } 
              başka 
              { entermode = OP_SELLSTOP ; } 
              
              if ( ((traderate < Bid ) && (wantBreakout)) || ((traderate >= Bid ) && (wantCounter)) ) 
                { bilet=OrderSend(Symbol(),entermode,Lots,traderate,0,myStopLoss,traderate-point*TakeProfit,GridName,16384,0,Red); }
          }
       }

    }
   }
   dönüş(0);
  }
//+------------------------------------------- -------------------+
 
Teşekkürler hdb. Ama belki de şebekeler hakkında ne düşündüğünüzü tam olarak anlamıyorum çünkü çok erken güncellemenin neden kötü olacağına dair bir neden göremiyorum. Bir girişi kaçırmak, şebekeyi tam potansiyelinden uzak tutar. Manuel olarak çalıştırdığımda, herhangi bir şey değiştiğinde siparişleri güncellerim. Ben koparma ızgaraları değil, geri çekme ızgaraları çalıştırıyorum, bu yüzden belki de fark burada yatıyor, ancak geri çekmelerde kesintiden faydalanırsınız ve bu nedenle ızgarayı deliklerden uzak tutmak idealdir.
 
soma,

evet, belki haklısın.. bu yüzden en iyisi sık sık güncellemek ama sadece birkaç ızgara yuvası mı? gerçi teste ihtiyacı var. Güçlü bir fikrim yok.

saygılar,
 
Pekala, ızgaranın bir güncellemesini yayınlamak için uygun bir anı bekliyordum - çünkü performansı son zamanlarda gerçekten berbattı.
Son güncellememden sonraki hafta tatildeydim ve şebeke durduruldu. Geçen hafta, ızgara çoğu zaman çalışıyordu.
Boşluk marjı sıfır olduğunda birkaç kez kapattım ve çoğu ana dalda 'yalnızca uzun' olarak ayarladım.
Bugün süper bir geri dönüş günüydü.

Bakiye : 93 (10 gün öncesinden beri +10)
Kullanılan marj: +15k
Uygun mrg : +28k
gerçek dışı. p&l : -49k (10 günden beri -11)
Bakiye : 44k

Net, 10 gün öncesine göre 1k daha kötü ve başlangıç bakiyesinin 5k altında.

Tüm bunların gerçekten zor kısmı, dezavantajı sınırlamaya çalışmaktır. Gerçekten bunu yapmanın yollarını bulmalıyım!
 
Düşüşü önlemenin tek yolunun isteğe bağlı yöntemler kullanmak olduğunu düşünüyorum.
yani, emir eklemeyi ne zaman durduracağınızı ve ne zaman kısa pozisyon eklemeyi bıraktığınızı bilmek.

Çok büyük bir lot büyüklüğü kullanarak ve bir sürü pozisyonu kapatmak zorunda kalarak kötü bir başlangıç yaptıktan sonra 100K bakiye ile başladı.

Bakiye: 97 594.19 Bakiye yaklaşık 2 hafta önce 83k
Serbest Marj: 6 016.88
Değişken P/L: -38 960,45 -56k kadar kötüydü
Marj: 52 616.86

son birkaç gün gerçekten yavaştı marj seviyesi %93 kadar düşüktü

ama şimdi tüm binbaşılar şu an için çılgına dönmüş gibiydi.
marj seviyesi yaklaşık %130'a kadar geri döndü
 
Kabul, darkstonexa, haklı olabileceğini düşünüyorum - ama om ema ve macd tabanlı birkaç otomatik varyasyonu test ediyorum ... Yine de çok iyimser değilim.

Bir arkadaşımın da stoploss'u çalışan bir tane var.. ve ayakta kalmak için mücadele ediyor! Bu gerçekten de çekme sorununu çözüyor!

Bu arada pozisyonlarımı temizledim - güçlü bir negatif taşıma faizi olan ve zararı iyi olan (birkaç 100 pip) tüm pozisyonlar kapatıldı.

Böylece ızgaralarım artık kafaya bir darbe daha almaya hazır (marj %430'a kadar)!
 
ne güzel bir 2 gün geçirdik... dün, haftalarca süren oldukça feci ticaretten sonra +5k puanımı yeşilde gördüm (özsermaye 54k, ben 49k ile başladım).

Şanslıyız ki demo hesaplarda deneyebiliriz!

Artık 'makul' bir konuma geri döndüğüme göre, tüm döviz çiftlerini aşağıdakileri yapacak şekilde ayarladım:
1) sadece pozitif taşıma faizi yönünde ticaret yapın (faiz 0'a yakın değilse, o zaman her iki şekilde yapın)
2) sadece 34 ema'nın üzerinde uzun, sadece 34 ema'nın altında şort
3) 2 yönlü para birimleri için, uzun veya kısa olup olmadığına karar vermek için 5 dakikalık grafikte macd kullanın

Bunun ne vereceğini göreceğiz!

not. Keşke geri test işe yarasaydı!
 
merhaba hdb,

Danışmanınızı EURUSD'de aldım, her iki tarafı da koparma olarak aldım.

Şimdi size şu sorunla zaten karşılaşıp karşılaşmadığınızı sormak istiyorum:

Bir süre sonra, aynı ızgara konumlarından bazılarında birden fazla siparişim var. Bazen iki tane var ama ben de 5 ve daha fazlasını gördüm.

Kodu anladığım kadarıyla, bir seferde yalnızca bir kılavuz konumunda açık olmalıdır.

Karşılaştırmadan önce tüm çiftleri int'ye dönüştürmekle uğraştım çünkü MQL2'de çift değerleri karşılaştırırken benzer bir sorun buldum.

Benzer bir şeyle karşılaştınız mı?

Saygılarımla,

kori
Neden: