MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 1076

 
danil77783 :

안녕하세요. 시간이 있다면 저를 도와주시겠습니까?질문은 조언자가 두 지표의 각 신호에 대한 주문 을 열어야 한다는 것입니다(특정 조합으로 신호를 제공함). 또는 지표의 신호에 따라 각각 시장에서 판매합니다. 그리고 마켓에는 주문이 하나밖에 없는데 마감될 때까지 다음 주문이 안 열리는데......주문을 세는 것인가요? 말해 주세요. 필요한 경우 코드를 보낼 수 있습니다.

                미리 감사합니다!

"if (OrdersTotal()==0)...." 조건을 제거합니다. - 그들은 단지 다음과 같이 말합니다: 우리는 주문이 전혀 없을 때만 항목을 찾고 새 주문을 엽니다.

그러한 조건이 없으면 많은 양의 새 팩이 즉시 열리지 않도록 추가 조건을 제시해야합니다. 그리고 이것은 이미 귀하의 전략에서 나온 것입니다. 이전 것에서 T 시간 동안 새 것을 열거나 막대를 제어하거나 주문 사이의 지점에서 거리를 유지하지 마십시오.

 

안녕하세요. 뉴비들을 도와주셔서 감사합니다. 나는 매일 한 초보자에게, 다음에는 다른 초보자에게 기본적인 질문에 답할 수 없었을 것입니다.

그리고 질문은 이렇습니다.

이전에는 mql4가 약간 다를 때 가능한 오류를 처리한 후 열기/닫기/수정과 같은 모든 주문 처리가 return(0) 함수에 의해 중단되어야 한다고 믿었습니다. 이 때문에 테스터에서 (각 틱이있는 방법으로 프레임은 1 분입니다) 현재 가격 으로 여러 개의 미결 주문을 동시에 마감해야하는 경우 테스터가 차례로 닫았습니다. 각각의 새로운 막대는 실제 그림을 다소 왜곡했습니다(때로는 꽤 강함). 새로운 Expert Advisor에서는 신호에 대해 정확하게 일부 주문을 마감해야 합니다.

질문: 매번 패스를 중단하지 않고 루프(부분적으로 닫힘)에서 모두 처리할 수 있습니까? 테스터가 그것을 씹을까요? 저것들. 한 바에서 부분적으로 모두 닫을 수 있습니까?

 
XpeHHukoB :

안녕하세요. 뉴비들을 도와주셔서 감사한 마음으로 시작하겠습니다. 나는 초심자에게, 그리고 다른 초심자에게 매일 나 자신을 위한 기본적인 질문에 대답할 수 없을 것입니다.

그리고 질문은 이렇습니다.

이전에는 mql4가 약간 다를 때 가능한 오류를 처리한 후 열기/닫기/수정과 같은 모든 주문 처리가 return(0) 함수에 의해 중단되어야 한다고 믿었습니다. 이 때문에 테스터에서 (각 틱이있는 방법으로 프레임은 1 분입니다) 현재 가격 으로 여러 개의 미결 주문을 동시에 마감해야하는 경우 테스터가 차례로 닫았습니다. 각각의 새로운 막대는 실제 그림을 다소 왜곡했습니다(때로는 꽤 강함). 새로운 Expert Advisor에서는 신호에 대해 정확하게 일부 주문을 마감해야 합니다.

질문: 매번 패스를 중단하지 않고 루프(부분적으로 닫힘)에서 모두 처리할 수 있습니까? 테스터가 그것을 씹을까요? 저것들. 한 바에서 부분적으로 모두 닫을 수 있습니까?

그것은 하나의 작은 조건으로 문제 없이 할 수 있습니다. 코드는 올바르게 작성되어야 합니다.

 
Seric29 :
예를 들어 int Funkz(int a) int Funkz(int a, int b, int w)와 같이 2개의 함수(오버로드될 수 있음)가 있고 프로그램이 컴파일되면 어떤 함수가 더 빨리 작동하는지, 하나의 주장 또는 그것은 중요하지 않기 때문에 프로그램은 이미 어셈블되어 있으며 본문에 설명된 대로 발생합니까, 아니면 함수의 인수가 메모리가 예약된 스택을 나타내기 때문에 여전히 작은 영향이 있습니까?

코드에 다른 수의 인수가 있는 같은 이름의 두 함수가 있는 경우 문제는 어느 것이 더 빨리 호출되는지가 아닙니다. 함수를 호출할 때 Funkz()를 작성하지 않고 인수의 수를 지정하기 때문입니다. 1을 지정하면 하나가 호출되고 3을 지정하면 다른 하나가 호출됩니다.

문제는 컴파일러가 같은 이름의 그러한 기능을 씹을 것인지 여부입니다.

내가 이해하는 음성은 코드에 관한 것이 아니라 컴파일된 파일에 관한 것입니까?

 
흠... 답변 감사합니다, Alexey. 많은 것이 분명해졌습니다.
 
도와주세요, 우리는 포인트 단위의 가치와 동일한 SL을 가지고 있으며(이것은 손실 수준 - 사용자 구성 가능한 매개변수입니다), 우리는 또한 일일 저가 또는 고가에 대한 기호 가격을 가지고 있습니다. 이것은 두 번째 손절매 와 같으며 그들은 서로 다른 시점에서 다르면 자동 비교 기능이 필요합니다. 그 후 로봇은 아래의 가장 작은 매개변수(SL 또는 Ilow - 매수 또는 SL -iHign 매도)로 정지 손실을 설정하지 않는 코드입니다. 원하는 결과를 제공하십시오, 나는 문제가 무엇인지 이해할 수 없습니다 ...
   пользовательский параметр - extern int    SL               = 1000;
//---------------------------------------------------------------
bool CheckForStopLossSell()
  {
   double Hign= iHigh ( Symbol (), PERIOD_D1 , 1 );
   double StopLoss= NormalizeDouble (SL* Point , Digits );
   double uroven = StopLoss;
   double OOPS= iLow ( Symbol (), PERIOD_D1 , 1 )-StepOpenOrder* Point ;
   double StopLossS= NormalizeDouble (OOPS+StopLoss, Digits );
   //----------------------------------------
   if (Hign>StopLoss) Alert ( "StopLoss" );
   return bool (StopLossS);
   
   //else
   if (Hign<StopLoss) Alert ( "Hign" );
   return bool (Hign); 
   
   //else
   Alert ( "uroven" );
   return bool (uroven); 
   
  }
//--------------------------------------------------------------
bool CheckForStopLossBuy()
  {
   double LOW= iLow ( Symbol (), PERIOD_D1 , 1 );
   double StopLoss=SL* Point ;
   double uroven = StopLoss;
   double SPREAD = MarketInfo( Symbol (), MODE_SPREAD )* Point ;
   double OOPB = ( iHigh ( Symbol (), PERIOD_D1 , 1 )+SPREAD)+StepOpenOrder* Point ;
   double StopLossB=OOPB-StopLoss;
   //-------------------------------------------
   if (LOW<StopLoss) Alert ( "StopLoss" ); 
   return bool (StopLossB);  
   
   //else
   if (LOW>StopLoss) Alert ( "LOW" ); 
   return bool (LOW);  
   
   //else
   Alert ( "uroven" );
   return bool (uroven);  
   
  }
//---------------------------------------------------------------
 
XpeHHukoB :

코드에 다른 수의 인수가 있는 같은 이름의 두 함수가 있는 경우 문제는 어느 것이 더 빨리 호출되는지가 아닙니다. 함수를 호출할 때 Funkz()를 작성하지 않고 인수의 수를 지정하기 때문입니다. 1을 지정하면 하나가 호출되고 3을 지정하면 다른 하나가 호출됩니다.

문제는 컴파일러가 같은 이름의 그러한 기능을 씹을 것인지 여부입니다.

내가 이해하는 음성은 코드에 관한 것이 아니라 컴파일된 파일에 관한 것입니까?

그리고 기능이 다르다면, 적거나 많은 수의 인수로 어느 것이 더 빨리 작동할까요? 다른 양의 오버로딩도 부하를 가하는 것 같습니까, 아니면 편의를 위해 하는 것입니까?

 

#define을 올바르게 작성하는 방법을 알려주시겠습니까?

나는 이렇게 쓴다

 #define my_POS    cst_Position.my_Position

이 디자인을 def로 변경하면 모든 것이 작동합니다.

my_POS.SelectByTicket(pos_DATA(DATA_TICKET))

그러나 내가 my_POS 를 작성할 때 . , 함수 목록이 점 뒤에 나타나지 않습니다.

동일

 #define pos_DATA  cst_Position.getPositionData

pos_DATA( 힌트가 없습니다.

내가 무엇을 잘못하고 있지?

 
bool operation= 0 ; for ( int pos= 0 ;pos< OrdersTotal ();pos++)
     { if ( OrderSelect (pos, SELECT_BY_POS) == false )   continue ;
       if ( OrderSymbol()== Symbol ()) break ;}


//=========================================================================================================
if (Hour()>= 2 &&Hour()<= 18 &&operation== 0 ){
if (OPB1== 1 )
   {operation= 1 ; if (operation== 0 &&OrderSymbol()!= Symbol ()|| OrdersTotal ()== 0 )
        { OrderSend ( Symbol (),OP_BUY,lots,Ask, 0 ,Bid-ss* Point ,Ask+T* Point , "My order#" ,mn, 0 ,Green);}}
         if (OrderType()==OP_BUY && OrdersTotal ()== 1 &&OrderMagicNumber()== 8 )
        { OrderSend ( Symbol (),OP_SELLSTOP, 5 *lots,OrderOpenPrice()-(ss-ss/ 4 )* Point , 0 , 0 ,SstopClose, "My order#" , 80 , 0 ,Red);}
       

if (OPS1== 1 )
   {operation= 1 ; if (operation== 0 &&OrderSymbol()!= Symbol ()|| OrdersTotal ()== 0 )        
         { OrderSend ( Symbol (),OP_SELL,lots,Bid, 0 ,Ask+ss* Point ,Bid-T* Point , "My order#" ,mn, 0 ,Red);}}
         if (OrderType()==OP_SELL && OrdersTotal ()== 1 &&OrderMagicNumber()== 8 )
         { OrderSend ( Symbol (),OP_BUYSTOP, 5 *lots,OrderOpenPrice()+(ss-ss/ 4 )* Point , 0 , 0 ,BstopClose, "My order#" , 80 , 0 ,Green);}}



if (OrderMagicNumber()== 80 ){operation= 0 ;
 { for ( int   ii= OrdersTotal ()- 1 ;ii>= 0 ;ii--)
       { OrderSelect (ii, SELECT_BY_POS);
         int   type   = OrderType(); bool result = false ;
         switch (type)
         { case OP_BUYSTOP   : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5 , Red ); //break;
           case OP_SELLSTOP  : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5 , Red ); //break;
         
          result = OrderDelete( OrderTicket() ); //break;
          }}}}

안녕하세요, 친애하는 전문가 여러분!

도와주세요, 문제를 해결해주세요.

모든 쌍을 테스트할 때 모든 것이 올바르게 작동하지만 다른 통화로 작업할 때 보류 중인 주문 이 배치되지 않고(임시 주문을 설정해야 함) 이익 실현이 트리거된 후 마감되지 않습니다.

가능하다면 코드를 변경하는 방법을 알려주십시오.



미리 대단히 감사합니다

Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Приказы на проведение торговых операций оформляются ордерами. Каждый ордер имеет множество свойств для чтения, информацию по ним можно получать с помощью функций Идентификатор позиции, который ставится на ордере при его исполнении. Каждый исполненный ордер порождает сделку, которая открывает новую или изменяет уже существующую позицию...
파일:
c5k8icfo.png  55 kb
 
Motzaart :

안녕하세요, 친애하는 전문가 여러분!

도와주세요, 문제를 해결해주세요.

...

코드를 올바르게 붙여넣으십시오.