[ARŞİV!] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 4. - sayfa 517

 

Millet, burada sadece yeni bir mum göründüğünde siparişin nasıl açılacağını sormuştum. TF D1 kullanıyorum.

Önceki mumların analizine dayanarak belirli seviyelerde (buystop_lvl ve sellstop_lvl) gecikmeler belirlemeye karar verdim.

Bu nedenle, gün başında yerleştirilmeleri gerekir ve yeni bir mum gelirse onları silin ve bekleyenlerin aktif olup olmadığı önemli değil, çalışıyorsa, piyasa emirleri olmalıdır. da kapatılsın. En fazla 2 emir, buystop ve sellstop.

İşte yazdıklarım:

1. Önce bekleyen veya piyasa emri olup olmadığına bakarım, varsa silerim/kapatırım.

 int total= OrdersTotal ();
   if (total!= 0 && NewBar()==true){
                 for ( int i= 0 ; i<total; i++)
                    {
                     OrderSelect (i,SELECT_BY_POS,MODE_TRADES);
                     if ( OrderType ()==OP_BUY)   OrderClose ( OrderTicket (), OrderLots (),Bid, 10 );
                     if ( OrderType ()==OP_SELL) OrderClose ( OrderTicket (), OrderLots (),Ask, 10 );
                     if ( OrderType ()==OP_BUYSTOP)   OrderDelete ( OrderTicket ());
                     if ( OrderType ()==OP_SELLSTOP) OrderDelete ( OrderTicket ());
                    }
                }

2. Ardından mevduatları hesaplanan seviyelere göre ayarladım:

 if (NewBar() == True && OrdersTotal ()== 0 )
    {
     OrderSend ( Symbol (),OP_BUYSTOP ,Lot,buystop_lvl , 10 ,buystop_SL ,buystop_TP, "Expert buystop\sellstop" );
     Sleep ( 10000 );
     OrderSend ( Symbol (),OP_SELLSTOP,Lot,sellstop_lvl, 10 ,sellstop_SL,sellstop_TP, "Expert buystop\sellstop" );
     
    }

3. Burada bana önerilen yeni çubuğun (NewBar) işlevi:

 //Функция нового бара
bool NewBar()
{
   static datetime lastbar = 0 ;
   datetime curbar = iTime ( Symbol (), 1440 , 0 );
   if (lastbar != curbar)
  {
    lastbar = curbar;
     return (true);
  }
   else return (false);
}

Sonuç olarak, mumun açılmasıyla birlikte siparişlerin verildiği ve hemen silindiği gerçeğine sahibim. Ve böylece sürekli.

Kodu (1) noktasından yorumladığımda, genellikle bir piperdi, test cihazında fiyat mevduata yaklaştı, ancak açılmadı, yani. pazarlanabilir hale gelmedi.

İşte, söyle bana sorun ne olabilir?

 

Bu NewBar() işlevi arka arkaya iki kez kullanılamaz

Böyle bir şey daha iyi:

bool newBar = NewBar();

// ve metnin daha aşağısında, NewBar()'ı newBar ile değiştirerek

 
Lanet olsun, hala nasıl yapacağımı bilmiyorum. Silme ve kapatma emirlerini içeren kodun sadece bir sonraki mumda çalışması gerekir. Ancak başkalarının da açması gerekecek. Böylece program tekrar kaldırmaya tırmanacak. Bir çeşit bayrağa ihtiyaç var ama beyinler nasıl yapılacağını anlamak için şimdiden terliyor :)
 
Noterday :
Ve genellikle NewBar nafig'i atın, son siparişin açılış saatine bakın ve Time[0] ile karşılaştırın. Daha fazlaysa - o zaman durumunuz, her şeyi silebilirsiniz.
 
trend_lab :
Ve genellikle NewBar nafig'i atın, son siparişin açılış saatine bakın ve Time[0] ile karşılaştırın. Daha fazlaysa - o zaman durumunuz, her şeyi silebilirsiniz.

Evet, olması gerektiği gibi görünüyor. Bunun için de teşekkürler :)
 
Noterday :
Lanet olsun, hala nasıl yapacağımı bilmiyorum. Silme ve kapatma emirlerini içeren kodun sadece bir sonraki mumda çalışması gerekir. Ama üzerinde, başkalarının da açılması gerekecek. Böylece program tekrar kaldırmaya tırmanacak. Bir çeşit bayrağa ihtiyaç var ama beyinler nasıl yapılacağını anlamak için şimdiden terliyor :)

OrderSend() işlevi hakkında dikkatlice okuyun. Bekleyen siparişler için bir parametresi vardır:

expiration - Срок истечения отложенного ордера.

Mevcut günün başında bekleyen bir emir açarken = iTime (Symbol(), PERIOD_D1, 0), bu zamana bir gün daha ekleyin - 1440 * 60. Ve çalışmayan bekleyen emirler başlangıçta silinecektir. ertesi günün.

PS Geçerli çubuğun sonu, iBarShift() işlevi aracılığıyla da kontrol edilebilir:

     if ( iBarShift ( Symbol (), PERIOD_D1 , OrderOpenTime()) == 0 ) return ( 0 );

veya bu koşula göre, son siparişin OrderTicket()'ini takip ederek diğer bazı "vücut hareketleri".

 
TarasBY :

OrderSend() işlevi hakkında dikkatlice okuyun. Bekleyen siparişler için bir parametresi vardır:

Mevcut günün başında bekleyen bir emir açarken = iTime (Symbol(), PERIOD_D1, 0), bu zamana bir gün daha ekleyin - 1440 * 60. Ve çalışmayan bekleyen emirler başlangıçta silinecektir. ertesi günün.


DC'nin kampanyayı desteklemediğini okudum.
 
Noterday :
DC'nin kampanyayı desteklemediğini okudum.
bu olur mu???
 
Görünüşe göre evet, ya da belki benimkiyle bir terminali olan bir tür pervaz. Bir sonraki başlıkta HESAP GEÇMİŞİ sekmesindeki raporlarımın da kaydedilmediğini söylemiştim...
 
Noterday :
Görünüşe göre evet, ya da belki benimkiyle bir terminali olan bir tür pervaz. Bir sonraki başlıkta HESAP GEÇMİŞİ sekmesindeki raporlarımın da kaydedilmediğini söylemiştim...
Garip bir şekilde, benim de yapım 416. Doğru, terminalin, süresi dolduktan sonra çalışmayan bekleyen bir siparişi silme işlemiyle HİÇBİR ŞEY YOKTUR - bu DC sunucusunun yetkinliğidir.