int total= OrdersTotal (); if (total> 1 ) OrderSelect (total+ 1 , SELECT_BY_POS, MODE_TRADES); if ( OrderType ()==OP_BUY) OrderModify ( OrderTicket (), OrderOpenPrice (), OrderStopLoss (),Ask+((TakeProfit+ 20 )* Point ), 0 , Blue ); if ( OrderType ()==OP_SELL) OrderModify ( OrderTicket (), OrderOpenPrice (), OrderStopLoss (),Ask+((TakeProfit- 20 )* Point ), 0 , Blue );
Kullandığım kod bu.
Bunu kullanmayı da denedim,
string Symb= Symbol (); // Symbol //------------------------------------------------------------------------------- 2 -- for ( int i= 1 ; i<= OrdersTotal (); i++) // Cycle searching in orders { if ( OrderSelect (i- 1 ,SELECT_BY_POS)==true) // If the next is available { // Analysis of orders: int Tip= OrderType (); // Order type if ( OrderSymbol ()!=Symb||Tip> 1 ) continue ; // The order is not "ours" double SL= OrderStopLoss (); // SL of the selected order double TP = OrderTakeProfit (); {TP=Ask+(TakeProfit+ 20 * Point );
Bu, tüm EA'dır ( güncellendi ):
//+------------------------------------------------------------------+ //| TimeBasedEA.mq4 | //| Copyright © 2008, MetaQuotes Software Corp. | //| http://www.metaquotes.net/ | //+------------------------------------------------------------------+ //changed by: "forex4capital@yahoo.ca" //changed again by: madmax3 // Time frame: M5 and higher extern int MagicNumber = 20080122 ; extern double DistancefromAsk; extern double DistancefromBid; extern double TakeProfit = 28 ; extern double StopLoss = 55 ; extern double Lots = 0.1 ; extern int StartHour = 2300 ; // Open Trade time extern bool OpenBuy = true; extern bool OpenSell = true; extern int NumBuys = 1 ; extern int NumSells = 1 ; extern int Slippage = 2 ; //+------------------------------------------------------------------+ //| S T A R T | //+------------------------------------------------------------------+ int start() { int cnt, ticket, total; if ( TimeDayOfWeek ( TimeCurrent ())== 5 && TimeCurrent ()>= StrToTime ( "22:59" )) { CloseAll(); return ( 0 ); } int ct; //-------------------------------------+ if ( Bars < 100 ) { Print ( "bars less than 100" ); return ( 0 ); } //-------------------------------------+ //-------------------------------------+ if (TakeProfit< 10 ) { Print ( "TakeProfit less than 10" ); return ( 0 ); // check TakeProfit } //-------------------------------------+ ct = Hour () * 100 + Minute (); total= OrdersTotal (); if (total< 1 ) { // no opened orders identified if ( AccountFreeMargin ()<( 1000 *Lots)) { Print ( "We have no money. Free Margin = " , AccountFreeMargin ()); return ( 0 ); } // check for long position (BUY) possibility if (ct == StartHour && Close[ 1 ]>Open[ 1 ] && OpenBuy) //if(ct == StartHour && High[1]<Open[0] && OpenBuy) { for ( cnt = 0 ; cnt < NumBuys; cnt++) { ticket= OrderSend ( Symbol (),OP_BUYSTOP,Lots,Ask+(DistancefromAsk* Point ),Slippage,Bid-(StopLoss* Point ),Ask+(TakeProfit* Point ), "" ,MagicNumber, TimeCurrent ()+ 39600 , CLR_NONE ); ticket= OrderSend ( Symbol (),OP_SELLSTOP,Lots,Bid-(DistancefromBid* Point ),Slippage,Ask+(StopLoss* Point ),Bid-(TakeProfit* Point ), "" ,MagicNumber, TimeCurrent ()+ 39600 , CLR_NONE ); if (ticket> 0 ) { if ( OrderSelect (ticket,SELECT_BY_TICKET,MODE_TRADES)) Print ( "BUY order opened : " , OrderOpenPrice ()); } else Print ( "Error opening BUY order : " , GetLastError ()); } return ; } // check for short position (SELL) possibility if (ct == StartHour && Close[ 1 ]<Open[ 1 ] && OpenSell) //if(ct == StartHour && Low[1]>Open[0] && OpenSell) { for ( cnt = 0 ; cnt < NumSells; cnt++) { ticket= OrderSend ( Symbol (),OP_SELLSTOP,Lots,Bid-(DistancefromAsk* Point ),Slippage,Ask+(StopLoss* Point ),Bid-(TakeProfit* Point ), "" ,MagicNumber, TimeCurrent ()+ 39600 , CLR_NONE ); ticket= OrderSend ( Symbol (),OP_BUYSTOP,Lots,Ask+(DistancefromBid* Point ),Slippage,Bid-(StopLoss* Point ),Ask+(TakeProfit* Point ), "" ,MagicNumber, TimeCurrent ()+ 39600 , CLR_NONE ); if (ticket> 0 ) { if ( OrderSelect (ticket,SELECT_BY_TICKET,MODE_TRADES)) Print ( "SELL order opened : " , OrderOpenPrice ()); } else Print ( "Error opening SELL order : " , GetLastError ()); } return ; } } for ( int iPos = OrdersTotal ()- 1 ; iPos >= 0 ; iPos--) if ( OrderSelect (iPos, SELECT_BY_POS) // Only my orders w/ && OrderMagicNumber () == MagicNumber // my magic number && OrderSymbol () == "EURUSD" // and my pair. ){ OrderModify ( OrderTicket (), OrderOpenPrice (), OrderStopLoss (),Ask+((TakeProfit+ 20 )* Point ), 0 , Blue ); if (! OrderSelect (iPos, SELECT_BY_POS)) Alert ( "OrderSelect failed: " , GetLastError ());} return ( 0 ); } void CloseAll() { for ( int cnt= OrdersTotal ()- 1 ;cnt>= 0 ;cnt--) { OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES); if ( OrderMagicNumber ()!=MagicNumber) continue ; // // // // // if ( OrderType ()==OP_BUY || OrderType ()==OP_SELL) { for ( int c= 0 ; c< 3 ; c++) { RefreshRates (); if ( OrderType ()==OP_BUY) { double cp = Bid;} else { cp = Ask;} OrderClose ( OrderTicket (), OrderLots (),cp, 0 , Yellow ); int err= GetLastError (); if (err== 4 || err== 136 || err== 137 || err== 138 || err== 146 ) { Sleep ( 5000 ); continue ; } break ; } break ; } } } // the end.
İlk kod bitinde . . . .
OrderSelect (total+ 1 , SELECT_BY_POS, MODE_TRADES);
burada var olmayan bir Sipariş seçiyorsunuz. 4 Emiriniz varsa, toplam 4 olacak ve pozisyon numaraları 0, 1, 2 ve 3 olacaktır. . . 5. pozisyonu seçtiniz. OrderSelect() bir bool döndürür, eğer bu dönüş değerini kontrol etmiş olsaydınız, bunun yanlış olduğunu görürdünüz ve o zaman bir şeylerin yanlış olduğunu anlardınız.
İkinci kod biti, gittiği kadarıyla iyi görünüyor. . . . neden bu satırın başında { var ?
{ TP=Ask+(TakeProfit+ 20 * Point );
İlk kod bitinde . . . .
burada var olmayan bir Sipariş seçiyorsunuz. 4 Emiriniz varsa, toplam 4 olacak ve pozisyon numaraları 0, 1, 2 ve 3 olacaktır. . . 5. pozisyonu seçtiniz. OrderSelect() bir bool döndürür, eğer bu dönüş değerini kontrol etmiş olsaydınız, bunun yanlış olduğunu görürdünüz ve o zaman bir şeylerin yanlış olduğunu anlardınız.
Dönüş değerini nasıl kontrol edebilirim? Dergide bulamıyorum, btw MQL'de bir çaylakım, sadece gördüğüm kodu anlamaya çalışıyorum.
Sıra seçimine gelince, çeşitli sayılar denedim ama yine de çalışmıyor, 'toplam'ı da kendi kendine denedim. İki sipariş seçmek için nasıl giderdim?
Teşekkürler,
madmax3
- madmax3 :
Dönüş değerini nasıl kontrol edebilirim?if (! OrderSelect (...)) Alert ( "OrderSelect failed: " , GetLastError ());
int total= OrdersTotal (); if (total> 1 )
Bu, EA'yı diğer grafiklerde ve manuel ticarette dahil olmak üzere diğerleriyle uyumsuz hale getirir.for ( int iPos = OrdersTotal ()- 1 ; iPos >= 0 ; iPos--) if ( OrderSelect (iPos, SELECT_BY_POS) // Only my orders w/ && OrderMagicNumber () == Magic.Number // my magic number && OrderSymbol () == chart.symbol // and my pair. ){ :
Tamam, şimdiye kadar bu var,
for ( int iPos = OrdersTotal ()- 1 ; iPos >= 0 ; iPos--) if ( OrderSelect (iPos, SELECT_BY_POS) // Only my orders w/ && OrderMagicNumber () == MagicNumber // my magic number && OrderSymbol () == "EURUSD" // and my pair. ){ OrderModify ( OrderTicket (), OrderOpenPrice (), OrderStopLoss (),Ask+((TakeProfit+ 20 )* Point ), 0 , Blue ); if (! OrderSelect (iPos, SELECT_BY_POS)) Alert ( "OrderSelect failed: " , GetLastError ());}
İlk satırda çeşitli numaralar denedim, EA şimdi bekleyen emirleri değiştiriyor gibi görünüyor, ben ise açık emirleri değiştirmem gerekiyor ve sadece iki tane varsa açık emirleri değiştiriyorum. Ayrıca, sırayı sürekli olarak değiştiriyor gibi görünüyor.
Ayrıca EA böyle çalışır,
- Önce belirli bir zamanda bekleyen iki emir (bir satış ve satın alma durdurma) verir.
- Siparişler, yerine getirilmezse belirli bir zamanda sona erer
- Her iki emir de açılırsa, her iki açık işlemin kârını al değiştirilmelidir.
Tamam, şimdiye kadar bu var,
İlk satırda çeşitli numaralar denedim, EA şimdi bekleyen emirleri değiştiriyor gibi görünüyor, ben ise açık emirleri değiştirmem gerekiyor ve sadece iki tane varsa açık emirleri değiştiriyorum. Ayrıca, sırayı sürekli olarak değiştiriyor gibi görünüyor.
Ayrıca EA böyle çalışır,
- Önce belirli bir zamanda bekleyen iki emir (bir satış ve satın alma durdurma) verir.
- Siparişler, yerine getirilmezse belirli bir zamanda sona erer
- Her iki emir de açılırsa, her iki açık işlemin kârını al değiştirilmelidir.
Ardından OrderType() öğesini de seçin
//+------------------------------------------------------------------+ //| TimeBasedEA.mq4 | //| Copyright © 2008, MetaQuotes Software Corp. | //| http://www.metaquotes.net/ | //+------------------------------------------------------------------+ //changed by: "forex4capital@yahoo.ca" //changed again by: madmax3 // Time frame: M5 and higher extern int MagicNumber = 20080122; extern double DistancefromAsk; extern double DistancefromBid; extern double TakeProfit = 28; extern double StopLoss = 55; extern double Lots = 0.1; extern int StartHour = 2300; // Open Trade time extern bool OpenBuy = true; extern bool OpenSell = true; extern int NumBuys = 1; extern int NumSells = 1; extern int Slippage = 2; //+------------------------------------------------------------------+ //| S T A R T | //+------------------------------------------------------------------+ int start() { int cnt, ticket, total; if (TimeDayOfWeek(TimeCurrent())==5 && TimeCurrent()>=StrToTime("22:59")) { CloseAll(); return(0); } int ct; //-------------------------------------+ if(Bars<100) { Print("bars less than 100"); return(0); } //-------------------------------------+ //-------------------------------------+ if(TakeProfit<10) { Print("TakeProfit less than 10"); return(0); // check TakeProfit } //-------------------------------------+ ct = Hour() * 100 + Minute(); total=OrdersTotal(); if(total<1) { // no opened orders identified if(AccountFreeMargin()<(1000*Lots)) { Print("We have no money. Free Margin = ", AccountFreeMargin()); return(0); } // check for long position (BUY) possibility if(ct == StartHour && Close[1]>Open[1] && OpenBuy) //if(ct == StartHour && High[1]<Open[0] && OpenBuy) { for ( cnt = 0; cnt < NumBuys; cnt++) { ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+(DistancefromAsk*Point),Slippage,Bid-(StopLoss*Point),Ask+(TakeProfit*Point),"",MagicNumber,TimeCurrent()+39600,CLR_NONE); ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-(DistancefromBid*Point),Slippage,Ask+(StopLoss*Point),Bid-(TakeProfit*Point),"",MagicNumber,TimeCurrent()+39600,CLR_NONE); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice()); } else Print("Error opening BUY order : ",GetLastError()); } return; } // check for short position (SELL) possibility if(ct == StartHour && Close[1]<Open[1] && OpenSell) //if(ct == StartHour && Low[1]>Open[0] && OpenSell) { for ( cnt = 0; cnt < NumSells; cnt++) { ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-(DistancefromAsk*Point),Slippage,Ask+(StopLoss*Point),Bid-(TakeProfit*Point),"",MagicNumber,TimeCurrent()+39600,CLR_NONE); ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+(DistancefromBid*Point),Slippage,Bid-(StopLoss*Point),Ask+(TakeProfit*Point),"",MagicNumber,TimeCurrent()+39600,CLR_NONE); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice()); } else Print("Error opening SELL order : ",GetLastError()); } return; } for (int i =1; i < OrdersTotal(); i++) { if(OrderSelect(i+1, SELECT_BY_POS, MODE_TRADES)) { OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),Ask+((TakeProfit+20)*Point),0,Blue); } } } return(0); } void CloseAll() { for(int cnt=OrdersTotal()-1;cnt>=0;cnt--) { OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if (OrderMagicNumber()!=MagicNumber) continue; // // // // // if (OrderType()==OP_BUY || OrderType()==OP_SELL) { for(int c=0; c<3; c++) { RefreshRates(); if (OrderType()==OP_BUY) { double cp = Bid;} else { cp = Ask;} OrderClose(OrderTicket(),OrderLots(),cp,0,Yellow); int err=GetLastError(); if(err==4 || err==136 || err==137 || err==138 || err==146) { Sleep(5000); continue; } break; } break; } } { int total=OrdersTotal(); if(total>1) OrderSelect(total+1, SELECT_BY_POS, MODE_TRADES); if(OrderType()==OP_BUY) OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),Ask+((TakeProfit+20)*Point),0,Blue); if(OrderType()==OP_SELL) OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),Ask+((TakeProfit-20)*Point),0,Blue); } } // the end.
![MQL5 - MetaTrader 5 müşteri terminalinde yerleşik ticaret stratejileri dili](https://c.mql5.com/i/registerlandings/logo-2.png)
- Ücretsiz ticaret 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
Belirli bir sembolün iki işlemi açık olduğunda, iki işlemin kârını değiştirecek bir şeyi kodlamaya çalışıyorum, esasen,
Sipariş Toplamı=2 ise
Çeşitli OrderSelect işlevlerini denedim, ancak çalışmasını sağlayamıyorum, bu tür bir görevi yürütmek için gerekli kodu bana verebilecek olan var mı?
Teşekkürler,
madmax3