주문 닫기가 작동하지 않음 - 페이지 5

 
감사합니다
 

안녕,


나는 몇 가지 다른 통화 차트에 EA를 첨부합니다. EA는 조건이 충족되면 단일 차트에서 많은 주문을 엽니다. 차트당 하나의 주문만 보장하기 위한 코딩은 무엇입니까?

 
chuale :

안녕,


나는 몇 가지 다른 통화 차트에 EA를 첨부합니다. EA는 조건이 충족되면 단일 차트에서 많은 주문을 엽니다. 차트당 하나의 주문만 보장하기 위한 코딩은 무엇입니까?


열린 주문을 반복하고 매직 넘버와 심볼을 확인하십시오 .

이미 열려 있는 주문이 있는 경우 더 이상 열지 마십시오.

추신. 귀하의 질문은 어떤 식으로든 스레드 제목과 관련이 없기 때문에 새 스레드를 시작했어야 합니다. :)

 
chuale :

안녕하세요 쓰델님

Time[0]은 막대 0의 시간을 나타냅니까? 시간[1], 시간[2] 등이 있습니까? 구글링을 해보았지만 인터넷에 정보가 많지 않았습니다. 또한 이 EA를 두 개의 통화 쌍에 첨부하면 OrderSelect가 차트 자체의 주문만 선택하거나 터미널의 모든 주문을 선택한다는 의미입니까?




시간[0]은 현재 막대가 시작된 시간 입니다. 예, Time[1]은 이전 막대가 시작된 시간 등입니다.

하나 이상의 차트에서 동일한 EA를 실행하려면 다른 차트에 동일한 기호가 있더라도 "MagicMunber" 변수가 각 EA에 대해 다른지 확인해야 합니다.

그러면 EA가 서로의 명령을 방해하지 않을 것입니다.

OrderSelect()는 차트가 아닌 서버에서 값을 가져옵니다.

귀하의 계정 및 주문에 대한 정보는 서버에 저장되므로 컴퓨터를 켤 때 주문 중지 또는 tp가 계속 실행됩니다.

 
chuale :

안녕하세요 쓰델님


"if(ticket<0)Print("Error OP_BUY order failed, error:"+GetLastError()) 코딩에 대해 "'숫자'에서 '문자열' postin forum.mq4 69 61"로의 암시적 변환"이라는 경고 메시지가 표시되는 이유 ;"?


이중 변수를 Comment()로 표시하거나 Print()로 인쇄하려면 DoubleToString() 함수 를 사용하여 문자열로 변환해야 합니다.

int 변수의 경우 변환이 명확하므로 IntToString()을 사용하지 않으면 너무 명확하기 때문에 여전히 컴파일되고 작동합니다.

 
chuale :

안녕,


나는 몇 가지 다른 통화 차트에 EA를 첨부합니다. EA는 조건이 충족되면 단일 차트에서 많은 주문을 엽니다. 차트당 하나의 주문만 보장하기 위한 코딩은 무엇입니까?


안녕하세요 Chuale님,

EA가 작동하도록 몇 가지 변경했습니다.

MagicNumber는 모든 차트에서 다른지 확인해야 하는 변수입니다!

변경 사항이 작동하는 이유와 방법을 설명하고 싶다면 가능하면 기꺼이 도와드리겠습니다.

몇 가지 테스트를 직접 실행하고 작동 방식을 확인할 수 있습니다. USDJPY에서 테스트했습니다.

Max 및 Min 변수는 조건에서 값 1과 -1을 대체하므로 최적화하고 다른 값이 더 잘 작동하는지 확인할 수 있습니다.


 if (bar2 <- 1 ) //changed to 
if(bar2 < Min
if (bar2 > 1) //changed to 
 if(bar2 > Max

매개변수를 최적화 하는 방법을 알고 있습니까?

질문이 있으시면 저에게 알려주십시오.

코드는 다음과 같습니다.

 //+------------------------------------------------------------------+
//|                                                 chuale_test1.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link        "http://www.abc.com"
#property version    "1.00"
#property strict

extern double    TakeProfit= 150 ;
extern double    Lots= 0.1 ;
extern double    StopLoss= 300 ;
extern int       Max = 6 ;
extern int       Min = -9;
extern int       MagicNumber = 12345 ;
extern int       Slip  = 3 ;
double      bar1;
double      bar2;
double      bar3;
double      bar3max,bar3min;
int         myTrades,ticket;
datetime    previousTime;
int         xMultiply;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {

//---
if ( Digits == 3 ) xMultiply= 100 ;
if ( Digits == 5 ) xMultiply= 10000 ;
//---
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//---

   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
int start()
  {
 
   myTrades = CountTrades();
//
   bar1=( iClose ( Symbol (), 0 , 2 )- iClose ( Symbol (), 0 , 3 ))*xMultiply;
   bar2=( iClose ( Symbol (), 0 , 1 )- iClose ( Symbol (), 0 , 2 ))*xMultiply;
   bar3=( iClose ( Symbol (), 0 , 0 )- iClose ( Symbol (), 0 , 1 ))*xMultiply;
   //
   if (myTrades> 0 )
     {
       if (bar3<Min) CloseThisSymbolAll( "OP_BUY" );
       if (bar3>Max) CloseThisSymbolAll( "OP_SELL" );
     }
   //
   if ( Time [ 0 ]==previousTime) return ( 0 );    
   previousTime= Time [ 0 ];          
   //
   if (myTrades< 1 )
     {
       if (bar2> 1 )
        {
         ticket= OrderSend ( Symbol (), OP_BUY ,Lots, Ask , 3 , Ask -StopLoss* Point , Ask +TakeProfit* Point , "Chua EA" ,MagicNumber, 0 ,Green);
         if (ticket< 0 ) Print ( "Error OP_BUY order failed. error : " +GetLastError()); 
         return ( 0 );
        }
       if (bar2<- 1 )
        {
         ticket= OrderSend ( Symbol (), OP_SELL ,Lots, Bid , 3 , Bid +StopLoss* Point , Bid +-TakeProfit* Point , "Chua EA" ,MagicNumber, 0 ,Red);
         if (ticket< 0 ) Print ( "Error OP_SELL order failed. error : " +GetLastError());
         return ( 0 ); 
        }
     }
   return ( 0 );
  }
//========================================================================
int CountTrades()
{
int count= 0 ;
int trade;
for (trade= OrdersTotal ()- 1 ;trade>= 0 ;trade--)
   {
   OrderSelect (trade, SELECT_BY_POS , MODE_TRADES );
   if ( OrderSymbol ()!= Symbol () || OrderMagicNumber () != MagicNumber)
   continue ;
   if ( OrderSymbol ()== Symbol () && OrderMagicNumber () == MagicNumber)
   if ( OrderType ()== OP_SELL || OrderType ()== OP_BUY )
   count++;
   }
return (count);
}
//========================================================================
void CloseThisSymbolAll( string direction)
  {
   string dir = direction;
   int trade;
   for (trade= OrdersTotal ();trade>= 0 ;trade--)
     {
       OrderSelect (trade, SELECT_BY_POS , MODE_TRADES );
       if ( OrderSymbol ()!= Symbol ()) continue ;
       if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==MagicNumber)
        {
         if ( OrderType ()== OP_BUY && dir == "OP_BUY" ) OrderClose ( OrderTicket (), OrderLots (), Bid ,Slip,Blue);
         if ( OrderType ()== OP_SELL && dir == "OP_SELL" ) OrderClose ( OrderTicket (), OrderLots (), Ask ,Slip,Red);
        }
     }
  }
//========================================================================
 

안녕하세요 쓰델님


매우 감사합니다. 당신은 매우 친절하고 도움이됩니다. 먼저 코딩을 진행하겠습니다. 다시 한번 감사합니다.

 

안녕하세요 쓰델입니다.

즉, 가장 최적의 값을 결정하기 위해 각 백테스트 에 대해 다른 Max 및 Min 값을 시도해야 합니까?

감사해요