Belirli bir süre ve/veya SL'den sonra siparişi otomatik olarak kapat - sayfa 3

 

Bu çok yanlış. . .

 OrderSelect (BuyTicket || SellTicket, SELECT_BY_TICKET);

(BuyTicket || SellTicket) true veya false ile sonuçlanır. . . ve bu durumda doğru veya yanlış 1 veya 0 olarak kabul edilecektir. . . SellTicket veya Buyticket numaranız değil. . .

Stoploss = 40 . . . . OrderSend'de stoploss kullandığınızda bu bir fiyattır. . . tırtıl sayısı değil, kayma tırtıl sayısıdır. . . belgeleri okuyun: OrderSend

kaybı durdurmak - Zarar seviyesini durdur.
kar almak - Kâr seviyesini alın.
 

tamam Ne demek istediğini biliyorum, bu yüzden OrderSelect'i kullanırken sırayı seçmek için bir komuta ihtiyacım var ... yoksa bu durumda OrderSelect genellikle yanlış mı?

 

Belgeleri okuyun. . . OrderLots , OrderTicket, OrderOpenPrice, vb. gibi öğeleri kullanabilmeniz için önce siparişi seçmek için OrderSelect gereklidir " Not: Sipariş daha önce OrderSelect() işlevi tarafından seçilmelidir.

Mevcut bir siparişe ait bir bilgiyi kullanmanız gerekmiyorsa, OrderSelect'e ihtiyacınız yoktur. yaparsan . . . iyi o zaman yaparsın

 
RaptorUK :

Belgeleri okuyun. . . OrderLots , OrderTicket, OrderOpenPrice, vb. gibi öğeleri kullanabilmeniz için önce siparişi seçmek için OrderSelect gereklidir " Not: Sipariş daha önce OrderSelect() işlevi tarafından seçilmelidir.

Mevcut bir siparişe ait bir bilgiyi kullanmanız gerekmiyorsa, OrderSelect'e ihtiyacınız yoktur. yaparsan . . . iyi o zaman yaparsın


Şu anda bu bilgiye ihtiyacım olacağını düşünüyorum çünkü piyasada bir pozisyon varsa onu kapatıp başka bir pozisyonla değiştirmem gerekiyor. OrderSelect'in bana bu şekilde yardımcı olacağını düşündüm. Ancak Orderselect sadece açık Emirler içinse ve piyasadaki aktif pozisyon için değilse kullanışlı değildir. haklı mıyım?

Ancak OrderSelect yardımcı olmazsa aktif pozisyonları nasıl kapatabilirim?

Saygılarımızla

Marc

 
Bekleyen emirleri kullanmazsanız ve açık emirleriniz varsa, bunlar bir Al veya Sat olacaktır. . . bir piyasa emri.
 
//+------------------------------------------------------------------+
//| Der Stundentrader.mq4 |
//| Der Marc |
//| Es gibt gar keine Internetseite |
//+------------------------------------------------------------------+
#property copyright "Der Marc"
#property link "Es gibt gar keine Internetseite"

//Wichtige Variablen
extern double Minlot=0.01;
extern int Digits2Round=2;
extern int PercentOfFreeDepo=1;
extern int Slippage=5;
extern int MagicNumber =1;
extern int TradeHour3=3;
extern int TradeHour4=4;
extern int TradeHour7=7;
extern int TradeHour10=10;
extern int TradeHour17=17;
extern int TradeHour18=18;
extern int TradeHour20=20;
extern int TradeHour12=12;
extern int TradeHour23=23;
extern int StopLoss=40;

//Globale Variablen
int BuyTicket;
int SellTicket;
double UsePoint;
int UseSlippage;

int openbuy = 0;
int opensell = 0;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
UsePoint = PipPoint(Symbol());
UseSlippage = GetSlippage(Symbol(), Slippage);
}

//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
double FreeDepo=NormalizeDouble(AccountBalance()-AccountMargin(),Digits2Round);
double Risk=NormalizeDouble((FreeDepo*PercentOfFreeDepo/100),Digits2Round);
double Lot=NormalizeDouble(Risk/(StopLoss/0.0001)*0.1,Digits2Round);
//===================== Lets determine lot size and risk ===================================
if ( Lot<Minlot )
{
Lot=Minlot;
}
Comment( "\n","Acceptable risk is ",PercentOfFreeDepo, "% = ",Risk," of the free money ",FreeDepo," in lots = ",Lot);
for(int i = OrdersTotal() - 1; i >= 0; i--)
    {
    if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
       {
       if((OrderOpenTime()+3600) < TimeCurrent())
          { 
           if (OrderType() == OP_BUY)          
              {
               bool Closed = OrderClose(OrderTicket() ,OrderLots(), Ask, UseSlippage, Red);           
               openbuy = 0;
              }
           if (OrderType() == OP_SELL)          
              {
               Closed = OrderClose(OrderTicket() ,OrderLots(), Bid, UseSlippage, Red);  
               opensell = 0;         
              }              
          }
       }
    }


//BuyOrder 
if ((TradeHour3==Hour())||(TradeHour4==Hour())||(TradeHour7==Hour())||(TradeHour10==Hour())||(TradeHour17==Hour())||(TradeHour18==Hour())||(TradeHour20== Hour()) && openbuy == 0) //Signal Buy
{
  openbuy=OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage ,Ask - StopLoss * Point,0,"time trader buy order ",MagicNumber,0,Blue);
}
//SellOrder
if ((TradeHour12==Hour())||(TradeHour23==Hour())&& opensell == 0) //Signal Sell
{
  opensell=OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,Bid + StopLoss * Point,0,"time trader sell order ",MagicNumber,0,Green);
} 

//----
return(0);
}
//+------------------------------------------------------------------+
//Pip Point Function
double PipPoint (string Currency)
{
int CalcDigits = MarketInfo(Currency, MODE_DIGITS);
if(CalcDigits == 2 || CalcDigits == 3) double CalcPoint = 0.01;
else if(CalcDigits == 4 || CalcDigits == 5) CalcPoint = 0.0001;
return (CalcPoint);
}

//Get Slippage Function
int GetSlippage(string Currency, int SlippagePips)
{
int CalcDigits = MarketInfo(Currency, MODE_DIGITS);
if(CalcDigits == 2 || CalcDigits == 4) double CalcSlippage = SlippagePips;
else if(CalcDigits == 3 || CalcDigits == 5) CalcSlippage = SlippagePips * 10;
return (CalcSlippage);
}

This seems to be mostly correct, but now I need to know why the prog only executes the sell order @ 12 & 23...and not the buy orders...?
 

nirvanamac :

Bu çoğunlukla doğru gibi görünüyor, ancak şimdi prog'un neden sadece 12 ve 23'teki satış emrini yerine getirdiğini ve satın alma emirlerini değil...?

Muhtemelen öyle. . ve muhtemelen yakalamadığınız bir hata oluşturur. . .

Denemek . . .

 //BuyOrder 
if ((TradeHour3== Hour ())||(TradeHour4== Hour ())||(TradeHour7== Hour ())||(TradeHour10== Hour ())||(TradeHour17== Hour ())||(TradeHour18== Hour ())||(TradeHour20== Hour ()) && openbuy == 0 ) //Signal Buy
{
  openbuy= OrderSend ( Symbol (),OP_BUY,Lot,Ask,Slippage ,Ask - StopLoss * Point , 0 , "time trader buy order " ,MagicNumber, 0 , Blue ); 
   if (openbuy < 0 ) Print ( "OrderSend OP_BUY failed, error: " , GetLastError () );
}
//SellOrder
if ((TradeHour12== Hour ())||(TradeHour23== Hour ())&& opensell == 0 ) //Signal Sell
{
  opensell= OrderSend ( Symbol (),OP_SELL,Lot,Bid,Slippage,Bid + StopLoss * Point , 0 , "time trader sell order " ,MagicNumber, 0 , Green );
   if (opensell < 0 ) Print ( "OrderSend OP_SELL failed, error: " , GetLastError () );

} 

Sipariş Kapatınız yanlış. . . Sattığınız Satın Al'ı kapatmak için Sor'da Satın Al'ı açarsınız. . . Bid'de Satıyorsunuz, Aldığınız Sell'i kapatmak için Bid'de bir Sell açarsınız. . . Sor'dan satın alırsınız.

 
RaptorUK :
Sipariş Kapatınız yanlış. . . Sattığınız Satın Al'ı kapatmak için Sor'da Satın Al'ı açarsınız. . . Bid'de Satıyorsunuz, Aldığınız Sell'i kapatmak için Bid'de bir Sell açarsınız. . . Sor'dan satın alırsınız.
Veya, siparişi zaten seçtiğiniz için, sadece
Closed = OrderClose ( OrderTicket () , OrderLots (), OrderClosePrice (), UseSlippage, Red );  
Ve sipariş türünü ayırt etmek zorunda değilsiniz.
 

Bana yardım ettiğin için çok teşekkür ederim...Kodu senin ipuçlarınla değiştirdim. Bu şekilde görünüyor:

//+------------------------------------------- -------------------+
//| Der Stundentrader.mq4 |
//| Der Marc |
//| Daha fazla bilgi için Internetseite |
//+------------------------------------------- -------------------+
#özellik telif hakkı "Der Marc"
#özellik bağlantısı "Es gibt gar keine Internetseite"

//Wichtige Değişkeni
dış çift Minlot=0.01;
harici int Digits2Round=2;
harici int PercentOfFreeDepo=1;
extern int Kayma=5;
harici int SihirliSayı =1;
harici int TradeHour3=3;
harici int TradeHour4=4;
harici int TradeHour7=7;
harici int Ticaret Saati10=10;
harici int Ticaret Saati17=17;
harici int Ticaret Saati18=18;
harici int Ticaret Saati20=20;
harici int Ticaret Saati12=12;
harici int Ticaret Saati23=23;
harici int StopLoss=400;

//Küresel Değişken
int BuyTicket;
int SellTicket;
çift Kullanım Noktası;
int UseSlippage;

int açık satın alma = 0;
int opensel = 0;
//+------------------------------------------- -------------------+
//| uzman başlatma işlevi |
//+------------------------------------------- -------------------+
int init()
{
UsePoint = PipPoint(Symbol());
UseSlippage = GetSlippage(Symbol(), Slippage);
}

//+------------------------------------------- -------------------+
//| uzman başlatma işlevi |
//+------------------------------------------- -------------------+
int başlangıç()
{
double FreeDepo=NormalizeDouble(AccountBalance()-AccountMargin(),Digits2Round);
double Risk=NormalizeÇift((FreeDepo*PercentOfFreeDepo/100),Digits2Round);
double Lot=NormalizeÇift(Risk/(Kaybı Durdur/0.0001)*0.1,Digits2Round);
//===================== Parti büyüklüğünü ve riskini belirleyelim ===================== ==============
if ( Lot<Minlot )
{
Lot=Minlot;
}
Comment( "\n","Kabul edilebilir risk ",PercentOfFreeDepo, "% = ",Risk," ücretsiz paranın ",FreeDepo," lot olarak = ",Lot);
for(int i = OrdersTotal() - 1; i >= 0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if((OrderOpenTime()+3600) < TimeCurrent())
{
if (OrderType() == OP_BUY || OP_SELL)
{
bool Kapalı = OrderClose(OrderTicket(),OrderLots(), OrderClosePrice(), UseSlippage, Red);
açık satın alma = 0;
opensel = 0;
}
if (OrderType() == OP_SEL)
{
Kapalı = OrderClose(OrderTicket(),OrderLots(), OrderClosePrice(), UseSlippage, Red);
opensel = 0;
açık satın alma = 0;
}
}
}
}
//Sipariş
if ((TicaretSaati3==Saat())||(TicaretSaati4==Saat())||(TicaretSaati7==Saat())||(TicaretSaati10==Saat())||(TicaretSaati17==Saat()) ||(TradeHour18==Hour())||(TradeHour20== Hour()) && openbuy == 0) //Sinyal Alımı
{
openbuy=OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage,Ask - StopLoss * Point,0,"süre tüccar alış emri",MagicNumber,0,Mavi);
if (openbuy < 0) Print("OrderSend OP_BUY başarısız oldu, hata: ", GetLastError() );
}
//SatSiparişi
if ((TradeHour12==Saat())||(TradeHour23==Saat())&& openell == 0) //Signal Sell
{
opensell=OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,Bid + StopLoss * Point,0,"zaman tüccar satış emri",MagicNumber,0,Green);
if (opensell < 0) Print("OrderSend OP_SELL başarısız oldu, hata: ", GetLastError() );
}

//----
dönüş(0);
}
//+------------------------------------------- -------------------+
//Pip Noktası Fonksiyonu
çift PipPoint (dize Para Birimi)
{
int CalcDigits = MarketInfo(Currency, MODE_DIGITS);
if(CalcDigits == 2 || CalcDigits == 3) double CalcPoint = 0.01;
else if(CalcDigits == 4 || CalcDigits == 5) CalcPoint = 0.0001;
dönüş (CalcPoint);
}

//Slippage Fonksiyonunu Al
int GetSlippage(dize Para Birimi, int SlippagePips)
{
int CalcDigits = MarketInfo(Currency, MODE_DIGITS);
if(CalcDigits == 2 || CalcDigits == 4) double CalcSlippage = SlippagePips;
else if(CalcDigits == 3 || CalcDigits == 5) CalcSlippage = SlippagePips * 10;
dönüş (CalcSlippage);
}

Geri testi çalıştırırken bir ERR_INVALID_TICKET (4108) Hata Mesajı var.

 

Tüm siparişler yerine getirilmedi

Hata, SL'nin daha önce tetiklendiği gerçeğine ait olabilir mi?