[Arşivle!] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 2. - sayfa 288

 

İyi günler, birisi sorunu çözmeme yardım edebilir mi, belki yanlış bir şey yapıyorum,

bir Klimov bloğu var Take ile son pozisyonu kapatmak için bayrağı döndürür. ve aynısı ayak üzerinde,

 //+----------------------------------------------------------------------------+
//|  Версия   : 19.05.2008                                                     |
//|  Описание : Возвращает флаг закрытия последней позиции по тейку.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
bool isCloseLastPosByTake( string sy= "" , int op=- 1 , int mn=- 1 ) {
   datetime t;
   double    ocp, otp;
   int       dg, i, j=- 1 , k=OrdersHistoryTotal();

   if (sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_HISTORY)) {
       if (OrderSymbol()==sy || sy== "" ) {
         if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
           if (op< 0 || OrderType()==op) {
             if (mn< 0 || OrderMagicNumber()==mn) {
               if (t<OrderCloseTime()) {
                t=OrderCloseTime();
                j=i;
              }
            }
          }
        }
      }
    }
  }
   if ( OrderSelect (j, SELECT_BY_POS, MODE_HISTORY)) {
    dg=MarketInfo(sy, MODE_DIGITS);
     if (dg== 0 ) if ( StringFind (OrderSymbol(), "JPY" )< 0 ) dg= 4 ; else dg= 2 ;
    ocp= NormalizeDouble (OrderClosePrice(), dg);
    otp= NormalizeDouble (OrderTakeProfit(), dg);
     if (ocp==otp) return (True);
  }
   return (False);
}

ve işte nasıl kullandığım

 bool Buystop=isCloseLastPosByStop( NULL ,OP_BUY,MagBuy);
bool BuyTake=isCloseLastPosByTake( NULL ,OP_BUY,MagBuy);
bool Sellstop=isCloseLastPosByStop( NULL ,OP_SELL,MagBuy);
bool SellTake=isCloseLastPosByTake( NULL ,OP_SELL,MagBuy);

//--------------------------------------------------------------------------------+
if (total== 1 ) 
  {
   if (Buystop==True)
   {   OpenPosition( NULL , OP_SELL, Lot,Bid+Sl3* Point , Bid-Tp3* Point ,MagBuy);
   }  
   if (BuyTake==True)  
    { OpenPosition( NULL , OP_BUY,  Lot, Ask-Sl* Point , Ask+Tp* Point ,MagBuy); 
    }     
    
   if (Sellstop==True)
   {   OpenPosition( NULL , OP_BUY,  Lot, 0 , Ask+Tp* Point ,MagBuy);
   }  
   if (SellTake==True)  
    { OpenPosition( NULL , OP_BUY,  Lot, Ask-Sl* Point , Ask+Tp* Point ,MagBuy); 
    } }

ve ilk başta benim için her şey planlandığı gibi gidiyor ve 4. partide gerekli olan açılıyor ve bu

 if (Buystop==True)
   {   OpenPosition( NULL , OP_SELL, Lot,Bid+Sl3* Point , Bid-Tp3* Point ,MagBuy);
   } 

Ne için ortaya çıktığını anlayamıyorum

netlik için burada

Numara. Zaman Tip Sipariş Ses Fiyat S/L T/P Kâr Denge
1 2011.01.03 00:00 satın almak 1 1.00 1.3346 1.3146 1.3446
2 2011.01.03 00:00 satmak 2 1.00 1.3344 0.0000 0.0000
3 2011.01.05 15:18 s/l 1 1.00 1.3146 1.3146 1.3446 -2001.70 47998.30
4 2011.01.05 15:18 satmak 3 1.00 1.3146 1.3546 1.2946
5 2011.01.07 14:38 t/p 3 1.00 1.2946 1.3546 1.2946 1983.88 49982.18
6 2011.01.07 14:38 satmak 4 1.00 1.2944 1.3344 1.2744
7 2011.01.07 14:38 satın almak 5 1.00 1.2946 1.2746 1.3046

 
FoxUA :

Ne için ortaya çıktığını anlayamıyorum


evet herşey doğru

İlk kontrol (toplam==1) emir hala 1 iken geçer. Blok içinde son kapalı satış -> açık, son kapalı alım -> tekrar aç bulursunuz. Zaten 3 arama emri çıktı.

 
Figar0 :


evet herşey doğru

İlk kontrol (toplam==1) emir hala 1 iken geçer. Blok içinde son kapalı satış -> açık, son kapalı alım -> tekrar aç bulursunuz. Zaten 3 arama emri çıktı.


evet, ama daha önce 6 numaradan sipariş açmasın diye sadece 2 sipariş olduğu nasıl yaratılır,

Numara. Zaman Tip Sipariş Ses Fiyat S/L T/P Kâr Denge
1 2011.01.03 00:00 satın almak 1 1.00 1.3346 1.3146 1.3446
2 2011.01.03 00:00 satmak 2 1.00 1.3344 0.0000 0.0000
3 2011.01.05 15:18 s/l 1 1.00 1.3146 1.3146 1.3446 -2001.70 47998.30
4 2011.01.05 15:18 satmak 3 1.00 1.3146 1.3546 1.2946
5 2011.01.07 14:38 t/p 3 1.00 1.2946 1.3546 1.2946 1983.88 49982.18
6 2011.01.07 14:38 satmak 4 1.00 1.2944 1.3344 1.2744
7 2011.01.07 14:38 satın almak 5 1.00 1.2946 1.2746 1.3046

 

Evet, birçok seçenek var, en kolayı Al veya Sat türünde açık bir sipariş olup olmadığını kontrol etmektir. Bunu alın (BuyOrders, SellOrders, TotalOrders değişkenleri programın genel değişkenleridir, start() işlevinde int BuyOrders, SellOrders, TotalOrders; olarak bildirilmelidir):

 void OrdersRecount()
{
  BuyOrders= 0 ; SellOrders= 0 ; TotalOrders= 0 ;
   if ( OrdersTotal ()> 0 )
  {
     for ( int j = 0 ; j < OrdersTotal (); j++) 
    {
       if ( OrderSelect (j, SELECT_BY_POS)) 
      {
         if (OrderSymbol() == Symbol () && OrderMagicNumber() == MagBuy)
        {
           if (OrderType() == OP_BUY) BuyOrders++;
           if (OrderType() == OP_SELL) SellOrders++;        
          TotalOrders++;
        }
      }
    } 
  }
}
 
Figar0 :

Evet, birçok seçenek var, en kolayı Al veya Sat türünde açık bir sipariş olup olmadığını kontrol etmektir. Bunu al:


Nasıl kullanılacağını anlamıyorum, zor değilse yardım edin

 
FoxUA :


Nasıl kullanılacağını anlamıyorum, zor değilse yardım edin


Sana yardım edeceğim, ama kodunun mantığı benim için hala anlaşılmaz:

   if (Buystop==True)
   {   OpenPosition( NULL , OP_SELL, Lot,Bid+Sl3* Point , Bid-Tp3* Point ,MagBuy);
   }  
   if (BuyTake==True)  
    { OpenPosition( NULL , OP_BUY,  Lot, Ask-Sl* Point , Ask+Tp* Point ,MagBuy); 
    }     
    
   if (Sellstop==True)
   {   OpenPosition( NULL , OP_BUY,  Lot, 0 , Ask+Tp* Point ,MagBuy);
   }  
   if (SellTake==True)  
    { OpenPosition( NULL , OP_BUY,  Lot, Ask-Sl* Point , Ask+Tp* Point ,MagBuy); 
    } }
Buy'un üç durumda açılıp birinde satıldığından emin misiniz? Nedense simetrik değil...
 
Figar0 :


Sana yardım edeceğim, ama kodunun mantığı benim için hala anlaşılmaz:

Üç durumda bir satışın ve bir alımda açıldığından emin misiniz? Nedense simetrik değil...


evet dedikleri gibi öyle olmalı benim için asıl olan piyasada poz yokken toko açması ve seçilen değerlerden biri doğruysa 1 emir açıp sonra beklemesi kapatmak için poz.

 bool totalBuy=ExistPositions( NULL ,OP_BUY,MagBuy) ;
bool totalSell=ExistPositions( NULL ,OP_SELL,MagBuy) ;


if (totalBuy==False||totalSell==False) 
 
FoxUA :

evet dedikleri gibi öyle olmalı benim için asıl olan piyasada poz yokken toko açması ve seçilen değerlerden biri doğruysa 1 emir açıp sonra beklemesi kapatmak için poz

Onlar. Satın almak için 2 siparişiniz olduğunda ve satmayacağınız bir siparişiniz olduğunda bir durumun mümkün olduğu ortaya çıktı?
 

Figar0 :

Т.е. получается что возможна ситуация когда у вас будет 2 ордера на покупку и не одного на продаж

tur başına hayır, duraksız satış ve trelling dahil sadece 2 poz olmalı, fırın tepsisinde ne olduğunu görebilirsiniz. Her şey doğru Toko 6 numarada fazladan bir poz açar
 
FoxUA :
tur başına hayır, duraksız satış ve trelling dahil sadece 2 poz olmalı, fırın tepsisinde neler olduğunu görebilirsiniz. Her şey doğru Toko 6 numarada fazladan bir poz açar


O zaman her şey çok daha karmaşık olacak, algoritmanın nasıl çalışması gerektiğini kelimelerle açıklayın ve aldığımdan beri yardım etmeye çalışacağım)

- Aynı anda 2 pozisyon mümkündür;

- ilk 2 pozu açın: al ve sat;

- bir uzun pozisyon zararı durdur ile kapatılmışsa, -> SL ve TP'yi üçe katlayarak kısa bir pozisyon açın, biri normal ST ve TP ile diğeri üçe katlanmış iki satış pozisyonu alıyoruz;

Daha uzağa mı?