-----------------------------------------------------------------+ //| Opening and Closeing.mq4 | //| Copyright © 2010, Ben banta | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright © 2010, Ben banta" //+------------------------------------------------------+ //| Closing My Way | //+------------------------------------------------------+ double ATR; double Slippage = 3 ; double StopLoss_Buy; double StopLoss_Sell; double Lots= 0.4 ; double MagicNumber; int ticket; int order; //----------------- Closing Sell --------------- int start() { for ( int index = OrdersTotal () - 1 ; index >= 0 ; index--) { if ( OrderSelect (index, SELECT_BY_TICKET) // existing orders && OrderMagicNumber() == MagicNumber // with my MN && OrderSymbol() == Symbol () // with my symbol ) { if (OrderType() == OP_SELL) order = OrderTicket(); if (OrderTicket() == OrderOpenPrice() + (ATR* 2 )) // ATR*2 above Sell. Hard Stop { OrderClose(OrderTicket(),OrderLots(), 3 , Blue ); Print ( "Sell order closed with Hard Stop" ); } else { Print ( "Error closing Sell Hard Stop" , GetLastError ()); } //ENDif (OrderTicket() == OrderOpenPrice() + (ATR*2)) //---------- Closeing Buy ------------- if (OrderType() == OP_BUY) order = OrderTicket(); if (OrderTicket() == OrderOpenPrice() - (ATR* 2 )) // ATR*2 below Buy. Hard Stop { OrderClose(OrderTicket(),OrderLots(), 3 , Red ); Print ( "Buy order closed with Hard Stop" ); } else { Print ( "Error closing Buy Hard Stop" , GetLastError ()); return ( 0 ); } //ENDif (OrderTicket() == OrderOpenPrice() - (ATR*2)) } //ENDIf ( OrderSelect(index, SELECT_BY_TICKET) etc } // END for loop //------------ Opening Buy ----------------- if ( OrdersTotal () < 1 ) // Checking for any working orders { if (Ask > High[iHighest( NULL , 0 ,MODE_HIGH, 20 , 1 )]) // When this condition is true, // with no working orders { ticket= OrderSend ( Symbol (),OP_BUY,Lots,Ask,Slippage, 0 , 0 , " " , 0 , 0 , Blue ); // Buy! Useing these parameters if (ticket> 0 ) { if ( OrderSelect (ticket,SELECT_BY_TICKET,MODE_TRADES)) Print ( "Buy Order Was a Big Success :" , OrderOpenPrice()); } else Print ( "Error Opening Buy Order :" , GetLastError ()); //ENDif (ticket>0) return ( 0 ); } //ENDif (Ask > High[iHighest(NU... etc //--------------- Opening Sell ---------------- if (Bid < Low[iLowest( NULL , 0 ,MODE_LOW, 20 , 1 )]) //When this condition is true, //with no working orders { ticket= OrderSend ( Symbol (),OP_SELL,Lots,Bid,Slippage, 0 , 0 , " " , 0 , 0 , Red ); //Sell! Useing these parameters if (ticket> 0 ) { if ( OrderSelect (ticket,SELECT_BY_TICKET,MODE_TRADES)) Print ( "Sell Order Was a Big Success :" , OrderOpenPrice()); } //ENDif (ticket>0) else Print ( "Error Opening Sell Order :" , GetLastError ()); //ENDif (OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) return ( 0 ); } //ENDif (Bid < Low[iLowest(NULL,0,MODE_LOW,20,1)]) return ( 0 ); }//ENDif ( OrdersTotal () < 1 ) } //ENDint start()Kod bloklarının okunmasını kolaylaştırmalı
if (OrderTicket() == OrderOpenPrice() - (ATR* 2 ))Sipariş bileti , siparişin anahtarı olan çok büyük bir tamsayıdır (muhtemelen milyarlarca).
OOP - 2ATR bir fiyattır.
İkisi ASLA eşit olmayacak
OrderClosePrice() == demek istediyseniz, OOP-2ATR gerçek sayıları neredeyse hiçbir zaman eşitleri karşılaştırmaz. bunun yerine kullanın:
if ( OrderClosePrice() - OrderOpenPrice()-ATR* 2 <= 0 ) //...
OrderSelect (index, SELECT_BY_TICKET) // existing orders && OrderMagicNumber() == MagicNumber // with my MN && OrderSymbol() == Symbol ()OrderSend'iniz sihirli bir sayı ayarlamıyor
Şerefe
Sipariş bileti, siparişin anahtarı olan çok büyük bir tamsayıdır (muhtemelen milyarlarca).
OOP - 2ATR bir fiyattır.
İkisi ASLA eşit olmayacak
OrderClosePrice() == demek istediyseniz, OOP-2ATR gerçek sayıları neredeyse hiçbir zaman eşitleri karşılaştırmaz. bunun yerine kullanın:
OrderSend'iniz sihirli bir sayı ayarlamıyor
Arayıp önerilerde bulunduğunuz için teşekkür ederiz. Ancak OOP -2ATR'yi hemen anlamadığımı söylemeliyim.
OOP = OrderOpenPrice. Bu ilk başta kafamdan geçti. Açıklamanız kesinlikle doğru. == işaretine takıldım. OrderClosePrice() asla OrderOpenPrice() eksi (ATR*2) değerine eşit olamaz. Bunu yakaladığın için teşekkürler.
Bakalım önerinizi anlamış mıyım? Burada yeniden ifade edeceğim. if(OrderClosePrice()-OOP()-ATR*2 <= 0)
Bu şuna benziyor (burada keyfi rakamları kullanacağım) OCP = 1.4361, OOP = 1.4321, ATR = 20. Yani ifade şöyle görünür:
if (1.4321 - 1.4361 - (20*2) <= 0), üzgünüm ama anlamıyorum.
Belki ifadeyi yeniden düzenlemek, ne demek istediğimi göstermek için aynı rakamları kullanabilirim. Ama onları programa soktuğumda bu da işe yaramadı.
Yeni düzenleme böyle görünüyor.
eğer (1.4361 >= 1.4321 + (20*2)).
OCP >=OOP + ATR*2 olduğunda, kontrol şuraya geçer:
OrderClose (OrderTicket(), OrderLots(), vb.)
Diğer gözleminiz, OrderSend'in sihirli bir sayı belirlememesiydi.
Bu kısmı programdan çıkarabilir miyim: && OrderMagicNumber == MagicNumber,
Tekrar teşekkürler ve başka iyileştirmeler görebilirseniz minnettar olurum.
Şerefe
OrderClose ( OrderTicket() , OrderLots() , OrderClosePrice() , 0 ) ;
Cevabınız için teşekkürler. Umarım iyisindir.
Öneri bu sabah eklendi. Derleyicinin kodladıklarımı beğenmediğini söylediğim için üzgünüm. Programdaki hangi ifadenin yanlış olduğundan emin değilim. Güzel olduğuna inandığım öneriler. Programı yeniden yayınlayacağım ve sorun olabileceğine inandığım alanı işaretleyeceğim. Kapatma stratejisini de belirteceğim.
Satış pozisyonu, Atr*2 tarafından emir açılış fiyatının üzerinde durdurulacaktır. Örneğin, OOP 1.4321, Atr =20 ve OCP = 1.4361'dir.
Bu yüzden ifadeyi şu şekilde kodladım:
if(OrderClosePrice >= OrderOpenPrice(), - (ATR*2)) // koşul karşılanır, kontrol şuraya geçer....
OrderClose (OrderTicket(), OrderLots(), OrderClosePrice(),Mavi) ;
Not: Herhangi bir ilgisi varsa, OrderSend ifadesinde StopLoss() veya TakeProfit() yoktur.
herkesin yardımları için tekrar teşekkürler
Şerefe
double ATR; double Slippage = 3 ; double StopLoss_Buy; double StopLoss_Sell; double Lots= 0.4 ; double MagicNumber; int ticket; int order; //----------------- Closing Sell --------------- int start() { for ( int index = OrdersTotal () - 1 ; index >= 0 ; index--) { if ( OrderSelect (index, SELECT_BY_TICKET) // existing orders //&& OrderMagicNumber() == MagicNumber // with my MN && OrderSymbol() == Symbol ()) // with my symbol { if (OrderType() == OP_SELL) order = OrderTicket(); //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< if (OrderClosePrice() >= OrderOpenPrice() + (ATR* 2 )) // condition to be met, // control then passes to... { OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(), Blue ); // OrderClose //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Print ( "Sell order closed with Hard Stop" ); } else { Print ( "Error closing Sell Hard Stop" , GetLastError ()); } //---------- Closeing Buy ------------- if (OrderType() == OP_BUY) order = OrderTicket(); if (OrderClosePrice() <= OrderOpenPrice() - (ATR* 2 )) // ATR*2 below Buy. Hard Stop { OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(), Red ); Print ( "Buy order closed with Hard Stop" ); } else { Print ( "Error closing Buy Hard Stop" , GetLastError ()); return ( 0 ); } } } //------------ Opening Buy ----------------- if ( OrdersTotal () < 1 ) // Checking for any working orders { if (Ask > High[iHighest( NULL , 0 ,MODE_HIGH, 20 , 1 )]) // When this condition is true, // with no working orders { ticket= OrderSend ( Symbol (),OP_BUY,Lots,Ask,Slippage, 0 , 0 , " " , 0 , 0 , Blue ); // Buy! Useing these parameters if (ticket> 0 ) { if ( OrderSelect (ticket,SELECT_BY_TICKET,MODE_TRADES)) Print ( "Buy Order Was a Big Success :" , OrderOpenPrice()); } else Print ( "Error Opening Buy Order :" , GetLastError ()); return ( 0 ); } //--------------- Opening Sell ---------------- if (Bid < Low[iLowest( NULL , 0 ,MODE_LOW, 20 , 1 )]) //When this condition is true, //with no working orders { ticket= OrderSend ( Symbol (),OP_SELL,Lots,Bid,Slippage, 0 , 0 , " " , 0 , 0 , Red ); //Sell! Useing these parameters if (ticket> 0 ) { if ( OrderSelect (ticket,SELECT_BY_TICKET,MODE_TRADES)) Print ( "Sell Order Was a Big Success :" , OrderOpenPrice()); } else Print ( "Error Opening Sell Order :" , GetLastError ()); return ( 0 ); } return ( 0 ); } }
Merhaba Huckleberry,
Programınızı biraz yeniden şekillendireceğim.
Şimdilik hoşça kal
Neden "order = OrderTicket();" kullanılır ve bu değer orderclose() işlevinde kullanılmaz?
Seçilen siparişin değişme olasılığı düşük olsa da, pozitif olarak tanımlanmış sipariş değerini kullanmak daha güvenli olmaz mıydı?
-
OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(), Blue );
OrderTicket() şu anda seçili bilet olacak - öğrenmemin bu aşamasında
OrderClose() işlemini yaptığınızda hangi orderticket'in seçildiğini söyleyemem.
//// Düzenlemek
Aslında "order= OrderTicket()" öğesinin önceki If ifadesinde tanımladığınız bilet olduğundan emin değilim.
Neden "order = OrderTicket();" kullanılır ve bu değer orderclose() işlevinde kullanılmaz?
Seçilen siparişin değişme olasılığı düşük olsa da, pozitif olarak tanımlanmış sipariş değerini kullanmak daha güvenli olmaz mıydı?
-
OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(), Blue );
OrderTicket() şu anda seçili bilet olacak - öğrenmemin bu aşamasında
OrderClose() işlemini yaptığınızda hangi orderticket'in seçildiğini söyleyemem.
//// Düzenlemek
Aslında "order= OrderTicket()" öğesinin önceki If ifadesinde tanımladığınız bilet olduğundan emin değilim.
Gözleminiz ve öneriniz için teşekkürler. Zamanınız değerlidir.
Mantığınız çok mantıklı. Seçilen sıralamaya gelince artık sizin kadar emin değilim. Önerinizi bir deneyeceğim.
Tekrar teşekkürler
Şerefe
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
herkese merhaba
Umarım sözdizimi eskisinden daha iyidir. Geçen haftadır Codersguru'yu okuyorum.
Aşağıdaki programda herhangi bir hata olmamasına rağmen derleyici sadece bir sipariş kaydedecektir. Ama kodum onu kapatmayacak.
Program, --- ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0," ",Blue), benim
Gördüğünüz gibi, stoploss veya kâr alma eklenmemiş. Nedeni, zaten kodlanmış bir StopLoss koşulu var ---
if(OrderTicket() == OrderOpenPrice() - (ATR*2))
{
OrderClose(OrderTicket(), OrderLots(), 3, Mavi)
Yani başka bir StopLoss eklemeye gerek yok, değil mi? TakeProfit'e kadar
Diğer sorun çözüldüğünde bunu kodlayacağım.
Kapanış koşulunu bu şekilde mi kodladım, yoksa söz diziminde yine sorun mu var?
Yardımlarınız için herkese teşekkürler ve sorunum başkalarına yardımcı olabilir,
Şerefe