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

 

Sergey Dubakin , CloseBy işlevini nazikçe önerdi, ancak ne yazık ki, benim için önemli koşulu, maksimum zararla pozisyonu kapatmak, zıt pozisyonda maksimum karla kapatmak, ancak karşılaşanlardan herhangi bir çifti kapatmak için önemli koşulu yerine getirmiyor:


avatar
on dokuz
Diubakin 25.02.2013 23:26
borilunad :
SW. profesyonel! Manuel modda çalışan closeBy() işlevini nerede bulabilirim? Baykuşlarıma yerleştirmek istiyorum, böylece manuel olarak değil, koşullara göre otomatik olarak, bir pozisyonu maksimum eksi ile maksimum artı ile kapatmak mümkün olur. Codebase'de bulamadım. Teşekkür ederim!

Bu seçeneği deneyin:

 bool LockOFF( int posit, int oppos, color arrow_color) {
double Result, PrevLoss, PrevProfit;
     int pos, orders_total, order_type, MaxProfitTicket, MaxLossTicket;
   bool Ans;

 MaxProfitTicket=- 1 ; MaxLossTicket=- 1 ;

 orders_total= OrdersTotal ();
 for (pos=orders_total- 1 ; pos>= 0 ; pos--) {
   if (! OrderSelect (pos, SELECT_BY_POS, MODE_TRADES)) continue ;
   if (OrderSymbol()!= Symbol () || OrderMagicNumber()!=EA_Magic) continue ; // не наш ордер
   if (OrderType()> 1 ) continue ;
  Result=OrderProfit()+OrderSwap()+OrderCommission();
   if (Result< 0.0 && (PrevLoss== 0.0 || Result<PrevLoss)) {
   PrevLoss=Result; MaxLossTicket=OrderTicket(); order_type=OrderType(); } } // end of for

 if (MaxLossTicket==- 1 ) return ( false ); // нет убыточной позиции
 if (order_type==OP_BUY) order_type=OP_SELL; else order_type=OP_BUY; 

 orders_total= OrdersTotal ();
 for (pos=orders_total- 1 ; pos>= 0 ; pos--) {
   if (! OrderSelect (pos, SELECT_BY_POS, MODE_TRADES)) continue ;
   if (OrderSymbol()!= Symbol () || OrderMagicNumber()!=EA_Magic) continue ; // не наш ордер
   if (order_type!=OrderType()) continue ;
  Result=OrderProfit()+OrderSwap()+OrderCommission();
   if (Result> 0.0 && (PrevProfit== 0.0 || Result>PrevProfit)) {
   PrevProfit=Result; MaxProfitTicket=OrderTicket(); } } // end of for

 if (MaxProfitTicket==- 1 ) return ( false ); // нет противоположной прибыльной позиции

 Ans=OrderCloseBy(MaxLossTicket, MaxProfitTicket);
 if (!Ans) { Print ( "Ошибка при встречном закрытие" ); return ( false ); }
 
 return ( true ); }

GetMaxLoss() ve GetMaxProfit() maksimum kaybını belirleyen işlevler yaptım, ancak LockOFF() işlevinin yalnızca herhangi bir çifti değil, belirttiğim çifti seçmesini sağlayamıyorum. Lütfen bana maksimum değerlerimi nereye koyacağımı gösterin ve belki de bu pozisyonların biletini veya indeksini belirlemek için daha fazla fonksiyona ihtiyacımız var, o zaman bu benim için bir sorun değil, ama tüm bunları bu LockOFF'ta () nereye koyacağım?! Teşekkür ederim!

 
borilunad :

Sergey Dubakin , CloseBy işlevini nazikçe önerdi, ancak ne yazık ki, benim için önemli koşulu, maksimum zararla karşı pozisyonla maksimum kârla kapatmak, ancak karşılaştığım herhangi bir çifti kapatmak için önemli koşulu yerine getirmiyor.

Merhaba, fonksiyon maksimum kazanç ile zıt pozisyon ile maksimum kayıp ile pozisyonu kapatır . İşte testçi için bir test danışmanı:

 extern int EA_Magic= 135 ; // внешняя переменная

int TimeNow, TimePrev, PrevType; // глобальные переменные

int start()
 {
   double Price,SL,TP;
     int Ticket;

  TimeNow=iTime( NULL , 240 , 0 );
   if (TimePrev==TimeNow) return ( 0 );

   if (PrevType!= 1 ) {
   Price= NormalizeDouble (Ask, Digits );    
   SL= NormalizeDouble (Price- 300 * Point , Digits );    
   TP= NormalizeDouble (Price+ 300 * Point , Digits );
   Ticket= OrderSend ( Symbol (),OP_BUY, 0.1 ,Price, 3 ,SL,TP, "" ,EA_Magic);
   if (Ticket!=- 1 ) { TimePrev=TimeNow; PrevType= 1 ; } }

   else if (PrevType!=- 1 ) {
   Price= NormalizeDouble (Bid, Digits );    
   SL= NormalizeDouble (Price+ 300 * Point , Digits );    
   TP= NormalizeDouble (Price- 300 * Point , Digits );
   Ticket= OrderSend ( Symbol (),OP_SELL, 0.1 ,Price, 3 ,SL,TP, "" ,EA_Magic);
   if (Ticket!=- 1 ) { TimePrev=TimeNow; PrevType=- 1 ; } }

   if (Hour()== 0 && TimePrev==TimeNow ) LockOFF(EA_Magic);

   return ( 0 );
 }

bool LockOFF( int EA_Magic) {
 double Result, PrevLoss, PrevProfit;
     int pos, orders_total, order_type, MaxProfitTicket, MaxLossTicket;
   bool Ans;

 MaxProfitTicket=- 1 ; MaxLossTicket=- 1 ;

 orders_total= OrdersTotal ();
 for (pos=orders_total- 1 ; pos>= 0 ; pos--) {
   if (! OrderSelect (pos, SELECT_BY_POS, MODE_TRADES)) continue ;
   if (OrderSymbol()!= Symbol () || OrderMagicNumber()!=EA_Magic) continue ; // не наш ордер
   if (OrderType()> 1 ) continue ;
  Result=OrderProfit()+OrderSwap()+OrderCommission();
   if (Result< 0.0 && (PrevLoss== 0.0 || Result<PrevLoss)) {
   PrevLoss=Result; MaxLossTicket=OrderTicket(); order_type=OrderType(); } } // end of for

 if (MaxLossTicket==- 1 ) return ( false ); // нет убыточной позиции
 if (order_type==OP_BUY) order_type=OP_SELL; else order_type=OP_BUY; 

 orders_total= OrdersTotal ();
 for (pos=orders_total- 1 ; pos>= 0 ; pos--) {
   if (! OrderSelect (pos, SELECT_BY_POS, MODE_TRADES)) continue ;
   if (OrderSymbol()!= Symbol () || OrderMagicNumber()!=EA_Magic) continue ; // не наш ордер
   if (order_type!=OrderType()) continue ;
  Result=OrderProfit()+OrderSwap()+OrderCommission();
   if (Result> 0.0 && (PrevProfit== 0.0 || Result>PrevProfit)) {
   PrevProfit=Result; MaxProfitTicket=OrderTicket(); } } // end of for

 if (MaxProfitTicket==- 1 ) return ( false ); // нет противоположной прибыльной позиции

 Ans=OrderCloseBy(MaxLossTicket, MaxProfitTicket);
 if (!Ans) { Print ( "Ошибка при встречном закрытие!" ); return ( false ); }
 
 return ( true ); }

Yeni bir 4 saatlik çubuk belirdiğinde dönüşümlü olarak Alış ve Satış pozisyonlarını açar ve yeni bir günün açılışında bir ters kapanış yapar.

 
Diubakin :

Merhaba, fonksiyon maksimum kazanç ile zıt pozisyon ile maksimum kayıp ile pozisyonu kapatır. İşte testçi için bir test danışmanı:

Yeni bir 4 saatlik çubuk belirdiğinde dönüşümlü olarak Alış ve Satış pozisyonlarını açar ve yeni bir günün açılışında bir ters kapanış yapar.

Merhaba Sergey! Farklı bir algoritmam var! İşin aslı şu ki, bu fonksiyon olanı kapatıyor, ama benim tam olarak maksimumu kapatması gerekiyor, hiçbirini değil! Eh, hiçbir şey, kimse yardım etmezse kendim bitireceğim! Seçeneğiniz sadece testçi için uygun o yüzden kurallara uygun olarak başlıkta ekledim. Açıkça hatasız çalışır, ancak maksimumu seçmez! Neyse, yardım için teşekkürler!
 
alsu :

Her şey, şimdi anlıyorum. Mevcut çubuktaki fiyat Open[0] + 30'a ulaştıysa, açın. Çubuk bittiyse, Open[0] değişmiştir ve açılış seviyesi buna göre kaydırılmıştır. Piyasada sadece bir ticaret olmalı, değil mi?

Sonra şöyle:

Yeni bir çubuk izlemeye gerek yoktur, çünkü oluştuğunda sistem otomatik olarak Open[0]'a yeni bir değer yazar, bu da yeni seviyenin doğru hesaplanacağı anlamına gelir. Lütfen bir AL ticaretinin mevcut Satış fiyatından açıldığını ve Teklifte kapatıldığını (TP ve SL) unutmayın. Ayrıca fiyat değerlerini normalleştirmek gerekiyor.


Yardımın için çok teşekkürler.

Ancak her dakika mumda test cihazında esnaf açar. enf. bu bağlantıda http://clip2net.com/s/2T98Y

Ve beş dakikalık bir mum için bir sipariş açmam gerekiyor, ancak her birinde değil.

Ancak yalnızca mevcut beş dakikalık süre > veya = 30 puan ise (açılış fiyatından maksimum değerine kadar)

Yani, sıfır açılış fiyatından otuzuncu noktada bir piyasa emri açın = mevcut beş dakikalık süre.

Ve açılış fiyatından maksimuma kadar mevcut beş dakikalık süre 30 puandan azsa, piyasa emri açmayın.

Onlar. 1999'dan beri excel'de hesapladığım birkaç sipariş olacak - her iki yönde de dolar başına 3000 avrodan biraz fazla.

Sonraki beş dakikalık periyoda geçiyoruz ve eğer öyleyse, yani. mevcut beş dakikalık periyot > veya = 30 puan, sonra otuzuncu noktada açıyoruz, daha az ise sonraki beş dakikalık periyoda geçiyoruz ... ve grafiğin sonuna kadar böyle devam ediyor.

Ama asıl mesele - kaba tahminlere göre, > veya = 30 noktanın , 30 puanlık bir durakta kapattıklarından çok daha sık 15 puan uçtuğu beş dakikanın çoğu. Yani, aralarındaki oran şöyledir: genel olarak, denge tablosu yukarı gidecek.Bu fikri bir test cihazında test etmek istiyorum.

Durumunuz var - açık sipariş yoksa

Ama benim sistemime göre üst üste yukarıdaki parametrelerle iki adet beşer dakikalık periyot oluşturulabilir ve bir önceki beş dakikalık periyottan gelen emir kapatılmazsa o zaman ikinci beş dakikalık periyotta emir açılmayacaktır. .

Ve işlemde emir olup olmadığına bakılmaksızın yukarıdaki parametrelerle her beş dakikalık periyotta bir emir açılmasına ihtiyacım var.

 
if (OrdesTotal()== 0 && Close[ 0 ]>=Price)  
 
alsu :

Her şey, şimdi anlıyorum. Mevcut çubuktaki fiyat Open[0] + 30'a ulaştıysa, açın. Çubuk bittiyse, Open[0] değişmiştir ve açılış seviyesi buna göre kaydırılmıştır. Piyasada sadece bir ticaret olmalı, değil mi?

Sonra şöyle:

Yeni bir çubuk izlemeye gerek yoktur, çünkü oluştuğunda sistem otomatik olarak Open[0]'a yeni bir değer yazar, bu da yeni seviyenin doğru hesaplanacağı anlamına gelir. Lütfen bir AL ticaretinin mevcut Satış fiyatından açıldığını ve Teklifte kapatıldığını (TP ve SL) unutmayın. Ayrıca fiyat değerlerini normalleştirmek gerekiyor.


Ayrıca ikinci şartınız da var - mevcut beş dakikalık sürenin kapanış fiyatı >= emrin açılış fiyatı ise.

Ama planıma göre, mevcut beş dakikalık periyodun kapanış fiyatı herhangi biri olabilir.Asıl mesele, Yüksek'in > veya = 30 puan olması gerektiğidir.


Close[ 0 ]>=Price

 
borilunad :
Merhaba Sergey! Farklı bir algoritmam var! İşin aslı şu ki, bu fonksiyon olanı kapatıyor, ama benim tam olarak maksimumu kapatması gerekiyor, hiçbirini değil! Eh, hiçbir şey, kimse yardım etmezse kendim bitireceğim! Seçeneğiniz sadece testçi için uygun o yüzden kurallara uygun olarak başlıkta ekledim. Açıkça hatasız çalışır, ancak maksimumu seçmez! Neyse, yardım için teşekkürler!

Nasıl ihtiyacın var? Düzenlenen, mevduat para biriminde (para olarak) en kârsız pozisyonu belirler, daha sonra mevduat para biriminde de en karlı zıt pozisyonu belirler ve bir karşı kapanış yapar.

borilunad :

GetMaxLoss() ve GetMaxProfit() maksimum kaybını belirleyen işlevler yaptım, ancak LockOFF() işlevinin yalnızca herhangi bir çifti değil, belirttiğim çifti seçmesini sağlayamıyorum. Lütfen bana maksimum değerlerimi nereye koyacağımı gösterin ve belki de bu pozisyonların biletini veya indeksini belirlemek için daha fazla fonksiyona ihtiyacımız var, o zaman bu benim için bir sorun değil, ama tüm bunları bu LockOFF'ta () nereye koyacağım?! Teşekkür ederim!

İşlev tüm bunlara sahiptir - maksimum kayıp, maksimum kâr, biletlerin tanımı da belirlenir.

 
Diubakin :

Nasıl ihtiyacın var? Düzenlenen, mevduat para biriminde (para olarak) en kârsız pozisyonu belirler, daha sonra mevduat para biriminde de en karlı zıt pozisyonu belirler ve bir karşı kapanış yapar.

İşlev tüm bunlara sahiptir - maksimum kayıp, maksimum kâr, biletlerin tanımı da belirlenir.

Hatalısınız! Görünüşe göre karşıt pozisyonların tek çifti var, ama daha fazlasına sahip olabilirim, bu yüzden yorumlarda tüm verileri gösterdim ve maxiLoss'u maxiProfit ile değil, sıralama sırasında ilk karşılaşılanları kapattığını görüyorum. Ve fonksiyonlarım, maksimum Zarar ve Kar ile pozisyon endekslerini açıkça gösteriyor. Geriye kalan tek şey bu kontrolleri LockOFF()'a eklemek!
 
borilunad :
Hatalısınız! Görünüşe göre karşıt pozisyonların tek çifti sende, ama daha fazlasına sahip olabilirim, bu yüzden yorumlarda tüm verileri gösterdim ve maxiLoss'u maxiProfit ile değil, sıralama sırasında ilk karşılaşılanları kapattığını görüyorum. Ve fonksiyonlarım, maksimum Zarar ve Kar ile pozisyon endekslerini açıkça gösteriyor. Geriye kalan tek şey bu kontrolleri LockOFF()'a eklemek!
Test cihazındaki fonksiyon için test danışmanına baktınız mı? Maks. max ile kayıp kaç sipariş olduğuna bakılmaksızın kar - iki veya yirmi.
 
Vinin :

https://www.mql5.com/en/code/7835 Bu yalnızca bir göstergedir. Expert Advisor'da nesneler kullanılmalıdır.
İlgilenen danışman, nesneler - kendiniz bir mum çizmek mümkün mü?
 
Diubakin :
Test cihazındaki fonksiyon için test danışmanına baktınız mı? Maks. max ile kayıp kaç sipariş olduğuna bakılmaksızın kar - iki veya yirmi.
Tabi ki yaptım! Doğru, üçten fazla yok. Her yerde, test cihazında sonuçlarda ve kayıt defterinde, demoda ve çizelgede! Yaptığımda, sana göstereceğim!