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

 

나는 어떤 식 으로든 고문을 끝낼 수 없습니다. 본질은 간단합니다. 먼저 하나의 직사각형을 그려 구매를 유도하고, 가격이 해당 영역에 도달하면 두 번째 직사각형을 그립니다. 가격이 거기에 도달하면 거래가 종료되어야 합니다.

그리고 다음과 같이 나옵니다. 가격은 영역 내에서 열리고 닫히기 시작합니다. 내가 무엇을 잘못하고 있지?


//+----------------------------------------------- --------------------+

//| 직사각형 OP_BUY.mq4 |

//+----------------------------------------------- --------------------+

#재산권 ""

#속성 링크 ""

#속성 버전 "1.00"

#속성엄격


extern int 매직 = 777701;

외부 이중 로트 = 0.01;

extern int 미끄러짐 = 3;



인트 티켓;

정수 OrderOfSymbol;




//+----------------------------------------------- --------------------+

//| 전문가 초기화 기능 |

//+----------------------------------------------- --------------------+

int OnInit()

{

//---

반환(INIT_SUCCESSED);

}

//+----------------------------------------------- --------------------+

//| 전문적인 초기화 해제 기능 |

//+----------------------------------------------- --------------------+

무효 OnDeinit(const int 이유)

{

//---

}

//+----------------------------------------------- --------------------+

//| 전문가 틱 기능 |

//+----------------------------------------------- --------------------+

무효 OnTick()

{

//---

// 사각형 이 있는지 확인:

if(ObjectsTotal(OBJ_RECTANGLE)==0)

{Comment(" 사각형 을 그려 매수 거래를 엽니다!");}


//사각형의 이름을 가져옵니다.

for(int n=0;n<ObjectsTotal();n++)

{

문자열 이름=객체 이름(n);

if(ObjectType(이름)==OBJ_RECTANGLE)

{

날짜 시간 t1a = (날짜 시간) ObjectGet(이름,OBJPROP_TIME1);

날짜 시간 t2a = (날짜 시간) ObjectGet(이름,OBJPROP_TIME2);


더블 p1a=NormalizeDouble(ObjectGet(이름,OBJPROP_PRICE1),자리수);

이중 p2a=NormalizeDouble(ObjectGet(이름,OBJPROP_PRICE2),자리수);

OrderOfSymbol=CounterOrderTradeType(-1);

if (OrderOfSymbol<1)

if (닫기[1]>열기[1])

if(TimeCurrent()>t1a && TimeCurrent()< t2a &&

입찰가 < p1a && 입찰가 > p2a )

{

티켓 = OrderSend(Symbol(),OP_BUY, Lot, Ask, Slippage, 0, 0, "구매 주문 열기", Magic, 0, Blue);

}

}

}

//이미 두 번째 사각형 이 있는지 확인합니다.

if(ObjectsTotal(OBJ_RECTANGLE)==1)

{Comment("구매 거래를 마감하기 위해 두 번째 직사각형 을 그립니다!");}


//사각형의 이름을 가져옵니다.

for(int n=0;n<ObjectsTotal();n++)

{

문자열 이름=객체 이름(n);

if(ObjectType(이름)==OBJ_RECTANGLE)

{

날짜 시간 t1b = (날짜 시간) ObjectGet(이름,OBJPROP_TIME1);

날짜 시간 t2b = (날짜 시간) ObjectGet(이름,OBJPROP_TIME2);


더블 p1b=NormalizeDouble(ObjectGet(이름,OBJPROP_PRICE1),자리수);

더블 p2b=NormalizeDouble(ObjectGet(이름,OBJPROP_PRICE2),자리수);


if(TimeCurrent()>t1b && TimeCurrent()< t2b &&

입찰가 < p1b && 입찰가 > p2b )

CloseBuyPositions1();

}

}

//이미 2개의 사각형 이 있는지 확인합니다.

if(ObjectsTotal(OBJ_CHANNEL)==2)

{Comment("매수 주문 개시 및 마감 영역이 설정되었습니다 - 거래가 진행 중입니다!");}


}

//+----------------------------------------------- --------------------+

CloseBuyPositions1() 무효화

{

for(int i = OrdersTotal() - 1, i >= 0, i--)

if(주문선택(i, SELECT_BY_POS, MODE_TRADES))

if(OrderMagicNumber() == 매직)

if(주문 기호() == 기호())

{



if(주문 유형()==OP_BUY)

{

if(OrderClose(OrderTicket(), OrderLots(), Bid, 3, NULL)){Print("주문 마감");}

}

}

}

//+----------------------------------------------- --------------------+

//| 현재 기호에 대한 계산 순서 |

//+----------------------------------------------- --------------------+

int CounterOrderTradeType( ENUM_ORDER_TYPE order_type)

{

정수 cnt=0;

//----

for(int pos=OrdersTotal()-1;pos>=0;pos--)

{

if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES)==false) 계속;

if(OrderSymbol()!=_Symbol) 계속;

if(order_type == OrderType() || order_type == -1) cnt++;

}

//----

리턴(cnt);

}

 
Порт-моне тв :

코드를 게시하는 기능이 있으므로 모든 사람이 귀하의 코드를 읽고 도움을 받는 것이 더 편리할 것입니다.

 
MakarFX :

코드를 게시하는 기능이 있으므로 모든 사람이 귀하의 코드를 읽고 도움을 받는 것이 더 편리할 것입니다.

그것은 그를 돕지 않을 것입니다. 빈 줄은 자신과 같은 사람만 읽을 수 있습니다.

 

Порт-моне тв :

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

스퀘어 이름의 독창성은 없고, 당신은 스퀘어가 있습니다 - 사고파는 조건

 
Порт-моне тв :

이것은 당신에게도 도움이 될 것입니다


 

오류 수정 방법을 알려주세요

 //+------------------------------------------------------------------+
#property copyright    "Copyright 2020,"
#property version      "1.0"
#property strict

//--- Inputs
int    side_position                    = 1 ;
input ENUM_BASE_CORNER   CornerInfo     = CORNER_RIGHT_UPPER ; 
input ENUM_BASE_CORNER   CornerInfo1    = CORNER_LEFT_UPPER ; 
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
   if (side_position == 2 )
   {
   CornerInfo  = CORNER_RIGHT_LOWER ; 
   CornerInfo1 = CORNER_LEFT_LOWER ;
   }
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+

다음은 오류입니다.

'CornerInfo' - constant cannot be modified      Wa.mq4  22      1
'CornerInfo1' - constant cannot be modified     Wa.mq4  23      1
2 errors, 0 warnings              3       1
 
Forallf :

고맙습니다!

별말씀을요 )

마카르FX :

오류 수정 방법을 알려주세요

다음은 오류입니다.

입력 변수 는 변경할 수 없습니다.

다음과 같이 가능합니다.

 input ENUM_BASE_CORNER   CornerInfo     = CORNER_RIGHT_UPPER ; 

ENUM_BASE_CORNER   MyCornerInfo     = CornerInfo; 


.......

if (side_position == 2 )
   {
   MyCornerInfo  = CORNER_RIGHT_LOWER ; 



 
Aleksei Stepanenko :

별말씀을요 )

입력 변수 는 변경할 수 없습니다.

다음과 같이 가능합니다.

감사합니다 이해했습니다

 
MakarFX :

이것은 당신에게도 도움이 될 것입니다


도움이되지 않았습니다. 그리고 나는 정사각형의 값이 2에서 취하는 것이 아니라 마지막에서 취한다는 것을 깨달았습니다. 이걸 어떻게 이겨야 할지 모르겠어. 스스로 알아내지 못했을 것입니다. 그러나 mql 도구를 완벽하게 알지 못하기 때문에 여기에 질문하고 여기에서 빗을 제공합니다.

 
Порт-моне тв :

도움이되지 않았습니다. 그리고 나는 정사각형의 값이 2에서 취하는 것이 아니라 마지막에서 취한다는 것을 깨달았습니다. 이걸 어떻게 이겨야 할지 모르겠어. 스스로 알아내지 못했을 것입니다. 그러나 mql 도구를 완벽하게 알지 못하기 때문에 여기에 질문하고 여기에서 빗을 제공합니다.

나는 당신의 코드가 당신이 말하는 사람들이 편리하게 읽을 수 있도록 빗을 제안합니다(여기에는 악의적인 의도가 없습니다)

정사각형의 경우 정사각형을 올바르게 식별하려면 원점을 이해해야 합니다. 당신은 그들을 또는 고문을 그립니다

사유: