[ARCHIVE] 포럼을 어지럽히 지 않도록 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 5. - 페이지 118

 
Shixan :

안녕하세요.

a=true 및 b=true 조건에서 두 개의 보류 중인 주문(BuyStop 및 SellStop)을 여는 코드를 작성했으며 잠시 후 어드바이저는 두 번째 신호가 나타날 때까지 두 주문을 모두 닫지만 때로는 어드바이저가 2개의 보류 중인 주문을 같은 방향. 왜 이런 일이 일어나고 이 "버그"를 피하는 방법은 무엇입니까?



if (a=true && b=true)
{
정수 주문 수 = 주문 총계();
if (OrderCount>1) return(0);
ticket1=OrderSend(Symbol(), OP_BUYSTOP, getLot(), PriceOpen_Buy, 슬리피지, PriceOpen_Sell,0,0,Green);
수면(1000);

ticket2=OrderSend(Symbol(), OP_SELLSTOP, getLot(), PriceOpen_Sell, 슬리피지, PriceOpen_Buy,0,0,Green);

절전(1000*59*시간 프레임);

(int i=OrdersTotal()-1; i>=0; i--)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) 중단;
if (OrderType()==OP_BUYSTOP ) OrderDelete(OrderTicket());
if (OrderType()==OP_SELLSTOP ) OrderDelete(OrderTicket());
if (OrderType()==OP_SELL ) OrderClose(OrderTicket(),OrderLots(),Ask,slippage);
if (OrderType()==OP_BUY ) OrderClose(OrderTicket(),OrderLots(), 입찰, 미끄러짐);
}

리턴(0);

}


말해 주세요.

미리 감사드립니다

귀하의 코드를 확인하지 않았고 이해하지 못했습니다. 하지만... 하나의 신호에 두 개 이상의 주문을 하지 않으려면 주문하기 전에 확인하십시오. 이 신호에 대해 이미 주문한 것이 있습니까? 그렇지 않으면 폭로하고, 있으면 대나무를 피웁니다.
 
mario065 :

여보세요,

설정에서 1:1의 고정 스케일 차트가 가능하다고 전문가에게 쓰는 것이 가능합니까?

가능하다면 방법을 알려주세요.

미리 감사드립니다.

라이브러리 는 할 수 있습니다.

섹션 "3.3. 차트 속성 설정을 위한 함수" 함수 ServiceSetScaleFix1To1 () .

라이브러리는 러시아어 및 영어 지역화에서만 작동합니다. 아마도 당신도 그럴 것입니다.

 
안녕하세요 메타에디터의 새 빌드 451에서 왜 컴파일을 하면 mq 4 파일 옆의 전문가 폴더에 두 번째 ex 4 파일이 나타나지 않는지 답변 부탁드립니다.
 

다음은 주문 개시 기능입니다.

 //+-------------------------------------------------------------------------------------+
//| Открытие короткой позиции                                                           |
//+-------------------------------------------------------------------------------------+
bool OpenSell( double price)
{
   int ticket = - 1 ;
   double SL = OrderOpenPrice() + i_sl * pt;
   double TP = OrderOpenPrice() - i_tp * pt;
   
   if (price < Bid)
       ticket = OrderSend ( Symbol (), OP_SELLSTOP, 0.1 , ND(price), 3 , 0 , 0 , NULL , i_magic, 0 );
       
   if (ticket > 0 && OrderSelect (ticket, SELECT_BY_TICKET == true ))
   {
       if (i_sl > 0 && OrderStopLoss() == 0 )
      {
         if (!OrderModify(ticket, OrderOpenPrice(), ND(SL), ND(TP), 0 , Red))
         {
             Print ( "Ошибка установки первичного стопа для шортов " , OrderType(), " - " , GetLastError ());
             Print ( "pt = " , pt);
             Print ( "Ask = " , Ask);
             Print ( "Bid = " , Bid);
             Print ( "SL_s = " , OrderOpenPrice() + i_sl * pt);
             Print ( "TP_s = " , OrderOpenPrice() - i_tp * pt);
         }
      }
   }
       return ( true );
}

다음은 매개변수의 출력입니다.

2013.01.26 11:02:56     2010.01.12 00:00  Phillip_Nel's_TS_for_M5 EURUSD,M5: TP_s = 1.4499
2013.01.26 11:02:56     2010.01.12 00:00  Phillip_Nel's_TS_for_M5 EURUSD,M5: SL_s = 1.4519
2013.01.26 11:02:56     2010.01.12 00:00  Phillip_Nel's_TS_for_M5 EURUSD,M5: Bid = 1.4513
2013.01.26 11:02:56     2010.01.12 00:00  Phillip_Nel's_TS_for_M5 EURUSD,M5: Ask = 1.4515
2013.01.26 11:02:56     2010.01.12 00:00  Phillip_Nel's_TS_for_M5 EURUSD,M5: pt = 0.0001
2013.01.26 11:02:56     2010.01.12 00:00  Phillip_Nel's_TS_for_M5 EURUSD,M5: Ошибка установки первичного стопа для шортов 5 - 4051
2013.01.26 11:02:56     2010.01.12 00:00  Phillip_Nel's_TS_for_M5 EURUSD,M5: OrderModify error 4051
2013.01.26 11:02:56     2010.01.12 00:00  Phillip_Nel's_TS_for_M5 EURUSD,M5: invalid takeprofit for OrderModify function
2013.01.26 11:02:56     2010.01.12 00:00  Phillip_Nel's_TS_for_M5 EURUSD,M5: open #1 sell stop 0.10 EURUSD at 1.45091 ok

여기에서 TP와 SL의 가격이 각각 매도호가와 매수호가보다 낮고 높다는 것을 알 수 있습니다. 모든 것은 맞다. 그러나 어떤 이유로 잘못된 정지로 인해 수정 오류 가 발생합니다. 어때요?

 
hoz :

다음은 주문 개시 기능입니다.

다음은 매개변수의 출력입니다.

여기에서 TP와 SL의 가격이 각각 매도호가와 매수호가보다 낮고 높다는 것을 알 수 있습니다. 모든 것이 정확합니다. 그런데 어떤 이유로 잘못된 정지로 인해 수정 오류가 발생합니다. 어때요?

욕설이 무엇을 위한 것인지 읽어 보셨습니까?

ERR_INVALID_FUNCTION_PARAMVALUE 4051 유효하지 않은 함수 매개변수 값

호출된 함수에 전달된 매개변수를 보세요. 아무것도 명확하지 않은 경우에는 전 세계를 처리해야 합니다.

추신. 대기 주문 을 할 때 라인

 if (price < Bid)

완전히 적절하지 않습니다. MarketInfo(Symbol(), MODE_STOPLEVEL)에 지정된 최소 허용 거리 준수 여부를 확인해야 합니다. 가장 먼저 눈에 들어온 것은.

두 번째 - 주문한 가격을 인쇄합니다. 스톱 앤 테이크는 Ask와 Bid가 아니라 주문 가격을 기준으로 해야 합니다.

 
Zhunko :

라이브러리 는 할 수 있습니다.

섹션 "3.3. 차트 속성 설정을 위한 함수" 함수 ServiceSetScaleFix1To1 () .

라이브러리는 러시아어 및 영어 지역화에서만 작동합니다. 아마도 당신도 그럴 것입니다.

쥰코 감사합니다.
 
artmedia70 :

욕설이 무엇을 위한 것인지 읽어 보셨습니까?

ERR_INVALID_FUNCTION_PARAMVALUE 4051 유효하지 않은 함수 매개변수 값

호출된 함수에 전달된 매개변수를 보세요. 아무것도 명확하지 않은 경우에는 전 세계를 처리해야 합니다.


물론 나는 읽었고 그래서 흥미로워졌다. 모든 입력 매개변수를 인쇄했습니다.

다음은 일어난 일입니다.

bool OpenSell(double price)
{
   int ticket = -1;
   double SL = OrderOpenPrice() + i_sl * pt;
   double TP = OrderOpenPrice() - i_tp * pt;
   
   if (price < Bid)
       ticket = OrderSend(Symbol(), OP_SELLSTOP, 0.1, ND(price), 3, 0, 0, NULL, i_magic, 0);
       
   if (ticket > 0 && OrderSelect(ticket, SELECT_BY_TICKET == true))
   {
      if (i_sl > 0 && OrderStopLoss() == 0)
      {
         Print("ND(price) = ", DoubleToStr(ND(price),Digits));
         Print("ND(SL) = ", DoubleToStr(ND(SL),Digits));
         Print("ND(TP) = ", DoubleToStr(ND(TP),Digits));
         Print("ND(OOP) = ", DoubleToStr(ND(OrderOpenPrice()),Digits));
         if (!OrderModify(ticket, ND(OrderOpenPrice()), ND(SL), ND(TP), 0, Red))
         {
            Print ("Ошибка установки первичного стопа для шортов ", OrderType(), " - ", GetLastError());
            Print("pt = ", pt);
            Print("Ask = ", Ask);
            Print("Bid = ", Bid);
            Print("SL_s = ", OrderOpenPrice() + i_sl * pt);
            Print("TP_s = ", OrderOpenPrice() - i_tp * pt);
         }
      }
   }
       return (true);
}

이것은 로그에 있는 내용입니다:

2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: TP_s = 1.4485
2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: SL_s = 1.4505
2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: Bid = 1.4496
2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: Ask = 1.4497
2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: pt = 0.0001
2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: Ошибка установки первичного стопа для шортов 5 - 4051
2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: OrderModify error 4051
2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: invalid takeprofit for OrderModify function
2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: ND(OOP) = 1.44946
2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: ND(TP) = -0.00100
2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: ND(SL) = 0.00100
2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: ND(price) = 1.44946
2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: open #4 sell stop 0.10 EURUSD at 1.44946 ok

일부 주문은 수정되고 일부는 수정되지 않습니다. 맨 처음의 ND(TP) , ND(SL) 값은 일반적으로 어쨌든 반환되었습니다. 왜요?

그런데 정규화 기능은 다음과 같습니다.

 //+-------------------------------------------------------------------------------------+
//| Функция нормализации                                                                |
//+-------------------------------------------------------------------------------------+
double ND( double A)
{
   return ( NormalizeDouble (A, Digits ));
}
 
artmedia70 :

욕설이 무엇을 위한 것인지 읽어 보셨습니까?

ERR_INVALID_FUNCTION_PARAMVALUE 4051 유효하지 않은 함수 매개변수 값

호출된 함수에 전달된 매개변수를 보세요. 아무것도 명확하지 않을 때, 우리는 전 세계를 다룰 것입니다, 선생님...

추신. 보류 주문을 할 때 라인

 if (price < Bid)

완전히 적절하지 않습니다. MarketInfo(Symbol(), MODE_STOPLEVEL)에 지정된 최소 허용 거리 준수 여부를 확인해야 합니다. 가장 먼저 눈에 들어온 것은.



일반적으로 개봉할 때가 아니라 주문을 수정할 때 이러한 수표를 본 적이 있습니다. 결국 바이스탑에 레이오프 가격을 정할 때 Ask보다 가격이 더 낮으면 그건 실수일 테니까요. 저는 이미 겪었습니다. 그리고 만약 10pp. 정지하면 정지 수준 값보다 분명히 높습니다. 저는 틱으로 거래하지 않습니다 :)
 
artmedia70 :


두 번째 - 주문한 가격을 인쇄합니다. 스톱 앤 테이크는 Ask와 Bid가 아니라 주문 가격을 기준으로 해야 합니다.



나는 이것이 수정을위한 것입니까? 역시 개봉할 때는 BID와 ASC가 중요합니다. 위 포스팅에서 다 다루었습니다.
 

안녕하세요,

전문가를 여러 창에서 동시에 작업하게 하고 싶습니다. 그러나 각 악기에 대해 하나의 주문만 열 수 있습니다. 이제 조건은 다음과 같습니다.

정수 합계 = OrdersTotal();

if (total<1) {분석 및 개방 포즈 블록} else {분석 및 포즈 폐쇄 블록 }

이제 동시에 두 개의 악기에 있으면 하나를 열 때 다른 하나의 작업이 차단됩니다. 그래서 다음과 같이 썼습니다.

정수 합계 = OrdersTotal();

정수 cnt;

if(총>0)
{
for(cnt=0;cnt<전체;cnt++)
{
주문 선택(cnt, SELECT_BY_POS, MODE_TRADES );
if(OrderSymbol()==Symbol())
{
Symbol_FLAG = 참;
}
}
}

if(total<1 || total>0 && Symbol_FLAG == false) {ntposes를 분석하고 열기 위한 블록}...

하지만 테스터에서는 작동하지 않습니다.

내가 실현할 수 없는 일을 시작한 것이 아닐까?