지정된 기간 및/또는 SL 후 자동으로 주문 마감 - 페이지 2

 
익숙해지면 걱정하지마
 
nirvanamac :


예, 물론 이해합니다...내 EA를 위한 노예를 갖고 싶지 않습니다....내가 알아야 할 유일한 것은 프로그램이 작동하는 방식을 이해하는 방법입니다...

SMA Cross와 같은 간단한 EA가 있다면...이것은 큰 문제가 되지 않습니다...하지만 더 많은 것을 달성하고 싶어할수록 더 어려워집니다...(적어도 저에게는)


 //-------------------------------------------------------------------+
//Check open orders
//-------------------------------------------------------------------+
if ( OrdersTotal ()> 0 ){
   for ( int i= 1 ; i<= OrdersTotal (); i++)           // Cycle searching in orders
     {
       if ( OrderSelect (i- 1 ,SELECT_BY_POS)==true) // If the next is available
        {
           if ( OrderMagicNumber ()==BuyMagicNumber) { int halt1= 1 ;}
           if ( OrderMagicNumber ()==SellMagicNumber) { int halt2= 1 ;}
        }
     }
}

사용한 코드의 대부분은 https://www.mql5.com/en/code 에서 가져온 것 같습니다.

귀하에 따라 귀하가 사용한 위의 프로그램 라인은 무엇입니까 ??

 
nirvanamac :
내 생각에 당신이 구멍 코드를 의미하거나?
반복합니다
코딩만 하면 됩니다. OrderClose() 및 시간 테스트는 어디에 있습니까?
너바나막 :
내 문제는 코드를 현재 코드에 채우는 것입니다...:
여기에 노예가 없습니다. 코딩을 배우 거나 누군가에게 돈을 지불하십시오. 우리는 당신을 위해 그것을 코딩하지 않을 것입니다. 기꺼이 도와드리겠습니다.
 

함께 안녕, 나는 올바른 길을 찾은 것 같지만 여전히 틀리다. 실제로 코드는 다음과 같습니다.

 //+------------------------------------------------------------------+
//|                                            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     Lots= 0.01 ;
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 ;

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


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

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
// Buy criteria
OrderSelect (SellTicket || BuyTicket, SELECT_BY_TICKET);
       //Close Order
       if ( OrderCloseTime () == 0 && SellTicket > 0 || BuyTicket > 0 )
         {
           double CloseLots = OrderLots ();
           double ClosePrice = Ask;
           bool Closed = OrderClose (SellTicket ,CloseLots, ClosePrice, UseSlippage, Red );
         }
         double OpenPrice = Ask;
//BuyOrder         
if ((TradeHour3== Hour ())||(TradeHour4== Hour ())||(TradeHour7== Hour ())||(TradeHour10== Hour ())||(TradeHour17== Hour ())||(TradeHour18== Hour ())||(TradeHour20== Hour ())) //Signal Buy
 {
   int openbuy= OrderSend ( Symbol (),OP_BUY,Lots,Ask,Slippage, 0 , 0 , "time trader buy order " ,MagicNumber, 0 , Blue );
    }
SellTicket = 0 ; 
BuyTicket = 0 ;
 
// Sell criteria
OrderSelect (BuyTicket || SellTicket, SELECT_BY_TICKET);
       //Close Order
       if ( OrderCloseTime () == 0 && BuyTicket > 0 || BuyTicket > 0 )
      {
       CloseLots = OrderLots ();
       ClosePrice = Bid;
       Closed = OrderClose (BuyTicket, CloseLots, ClosePrice, UseSlippage, Red );
      }
               OpenPrice = Bid;
 //SellOrder
 if ((TradeHour12== Hour ())||(TradeHour23== Hour ())) //Signal Sell
 {
   int opensell= OrderSend ( Symbol (),OP_SELL,Lots,Bid,Slippage, 0 , 0 , "time trader sell order " ,MagicNumber, 0 , Green );
    }  
SellTicket = 0 ;
BuyTicket = 0 ; 
 
//----
   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 == 3 ) double CalcSlippage = SlippagePips;
   else if (CalcDigits == 4 || CalcDigits == 5 ) CalcSlippage = SlippagePips * 10 ;
   return (CalcSlippage);
  }

내 EA가 모든 주문을 연 후 마감한다는 문제가 있습니다. 보시다시피 모든 Buy & SellTickets에 대한 OrderClosetime을 작성했습니다. EA에게 1시간 후에 닫아야 한다고 알려주는 기능 을 못찾겠어요...

 
nirvanamac :


예, 물론 이해합니다...내 EA를 위한 노예를 갖고 싶지 않습니다....내가 알아야 할 유일한 것은 프로그램이 작동하는 방식을 이해하는 방법입니다...

SMA Cross와 같은 간단한 EA가 있다면...이것은 큰 문제가 되지 않습니다...하지만 더 많은 것을 달성하고 싶어할수록 더 어려워집니다...(적어도 저에게는)

현재 EA는 매우 간단합니다. . . 2000줄 이상의 코드가 있습니다. . . 그것 의 대부분 은 방법 과 아무 관련 이 없지만 내가 작성 하게 될 모든 EA 에 있어야 하는 하우스 키핑 및 표준 기능 입니다 . . . 위치 크기 계산, 주문하기, 주문 계산, TP 또는 SL에 도달했을 때 마감된 주문 확인, 오류 보고 등 . . 나는 쓰고, 테스트하고, 수정하고, 테스트하는 데 몇 달을 보냈다. . . 내 코드.
 
RaptorUK :
현재 EA는 매우 간단합니다. . . 2000줄 이상의 코드가 있습니다. . . 그것 의 대부분 은 방법 과 아무 관련 이 없지만 내가 작성 하게 될 모든 EA 에 있어야 하는 하우스 키핑 및 표준 기능 입니다 . . . 위치 크기 계산, 주문하기, 주문 계산, TP 또는 SL에 도달했을 때 마감된 주문 확인, 오류 보고 등 . . 나는 쓰고, 테스트하고, 수정하고, 테스트하는 데 몇 달을 보냈다. . . 내 코드.


여기에 업로드 했습니까?

 
nirvanamac :


여기에 업로드 했습니까?

아니, 내가 왜 그럴까요?
 
내 코드 (거래 로직 제외)는 1500줄 이상의 코드이며 업로드했습니다.
 

함께 안녕,

프로그래밍에 시간을 보내고 여기에서 다른 EA를 살펴본 후 현재 결과를 확인할 수 있습니다.

 //+------------------------------------------------------------------+
//|                                            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;


//+------------------------------------------------------------------+
//| 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);
// Buy criteria
OrderSelect (SellTicket || BuyTicket, SELECT_BY_TICKET);
       //Close Order
       if (( OrderOpenTime ()+ 3600 ) > TimeCurrent () && SellTicket > 0 || BuyTicket > 0 )
         {
           double CloseLots = OrderLots ();
           double ClosePrice = Ask;
           bool Closed = OrderClose (SellTicket ,CloseLots, ClosePrice, UseSlippage, Red );
         }
         double OpenPrice = Ask;
//BuyOrder         
if ((TradeHour3== Hour ())||(TradeHour4== Hour ())||(TradeHour7== Hour ())||(TradeHour10== Hour ())||(TradeHour17== Hour ())||(TradeHour18== Hour ())||(TradeHour20== Hour ())) //Signal Buy
 {
   int openbuy= OrderSend ( Symbol (),OP_BUY,Lot,Ask,Slippage,StopLoss, 0 , "time trader buy order " ,MagicNumber, 0 , Blue );
    }
SellTicket = 0 ; 
BuyTicket = 0 ;
 // Sell criteria
OrderSelect (BuyTicket || SellTicket, SELECT_BY_TICKET);
       //Close Order
       if (( OrderOpenTime ()+ 3600 ) > TimeCurrent () && SellTicket > 0 || BuyTicket > 0 )
      {
       CloseLots = OrderLots ();
       ClosePrice = Bid;
       Closed = OrderClose (BuyTicket, CloseLots, ClosePrice, UseSlippage, Red );
      }
               OpenPrice = Bid;
 //SellOrder
 if ((TradeHour12== Hour ())||(TradeHour23== Hour ())) //Signal Sell
 {
   int opensell= OrderSend ( Symbol (),OP_SELL,Lot,Bid,Slippage,StopLoss, 0 , "time trader sell order " ,MagicNumber, 0 , Green );
    }  
SellTicket = 0 ;
BuyTicket = 0 ; 
 
//----
   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);
  }

이제 1보다 많은 주문이 열려 있다는 문제가 있습니다. 또한 "130"이라는 오류 메시지가 나타납니다...