첨부는 거래 전략을 조사하기 위해 노력한 Expert Advisor의 일원이지만 배열을 다룰 때 MQL4의 한계에 다소 어려움을 겪고 있습니다. 내가 원하는 것은 배열을 사용하여 내가 열어 놓은 상황에 관한 정보를 저장하고 요소의 값을 다시 정의하는 것입니다. 내가 구현하고자하는 것은 미결 주문 모음을 재구성하는 일련의 3 가지 기능입니다. 이것은 닫히거나 모든 위치가 열린 후에 할 수 있습니다. 다음 기능은 각각의 개시 가격에 따라 미결 주문을 분류하기로되어 있습니다. 순차적 기능은 정지 손실을 재평가하고 이익 가치를 취하는 것입니다. 손해를 방지하고 이익 가치를 창출하는 가치는 주문의 도입 가격에 근거해야합니다. 스톱 로스를 수행하고 이익을 얻으려는 EA를 원했습니다. 이런 방식으로 EA를 구축 할 때 위험을 감수하고 그렇게함으로써 위험을 미리 알고 있습니다.
더블 OrderStack [7] [9];/주문 정보 배열
if ((OrderStack [TotalOrders 1] [1] lt; Bid) (TotalOrders lt; 2))/새 판매 위치를 더 유리한 가격으로 엽니 다.
//삼
TicketNum = OrderSend (Symbol (), OP_SELL, LotSize2, Bid, 3,0,0, CommentString, 0,0, Red);/이 주문을 엽니 다.
If (TicketNumlt; 0)
//4
인쇄 (오류 거래 : Error Code =, GetLastError () ,, Lotsize :, Lots);
//삼
그밖에
//4
if (OrderSelect (TicketNum, SELECT_BY_TICKET)))
//5
인쇄 (주문 판매 가격 :, OrderOpenPrice ());
OrderFlagS = 1;/주 EA 함수에서 발언에 사용됨
단말기();/미결 주문 데이터 배열을 생성하는 함수를 호출합니다.
//4
//삼
//2
} /1
}/0
//------------------------------------------------ --------------------
//Terminal.mqh
//------------------------------------------------ ------------------------------ 1 --
//주문 회계 기능
//전역 변수 :
//OrderStack [7] [9]
//가장 최근에 알려진 주문 배열
//첫 번째 색인 = 주문 번호
//[] [0] 정의되지 않았습니다.
//[] [1] 주문 공개 가격 (절대 가격 값)
//[] [2]이 주문의 StopLoss (위) 가격 값)
//[] [3]이 주문 (위)의 TakeProfit 가격 값)
//[] [4] 주문 번호
//[] [5] 로트 주문량 (절대 가격 값)
0 = B, 1 = S, 2 = BL, 3 = SL, 4 = BS, 5 = SS
//[] [7] 주문 매직 번호
//[] [8] 0/1 비평 접근성
//Mas_Tip [6]
//모든 정렬 순서의 배열
//주문 양식 : 0 = B, 1 = S, 2 = BL, 3 = SL, 4 = BS, 5 = SS
//------------------------------------------------ ------------------------------ 2 -
더블 데크()
//1
int Mas_Tip [6];
int Qnt = 0;
int 나;
//주문 카운터
//------------------------------------------------ ------------------------------ 삼 --
ArrayInitialize (OrderStack, 0.0);/선택 영역을 제로화합니다.
ArrayInitialize (Mas_Tip, 0);/배열을 0으로 만든다.
//------------------------------------------------ ------------------------------ 4 -
for (I = 0; I lt; OrdersTotal (); I )/시장 및 미정 주문의 경우
//2
if ((OrderSelect (I, SELECT_BY_POS) == true) (OrderSymbol () == Symbol ()))
//다음에 하나가있을 때. . 그리고 우리의 통화 쌍
//삼
//------------------------------------------------ --------------------- 5 -
Qnt ;/주문 금액
OrderStack [Qnt] [1] = OrderOpenPrice ();/오픈 가격 주문
OrderStack [Qnt] [2] = OrderStopLoss ();/SL 가격
OrderStack [Qnt] [3] = OrderTakeProfit ();/TP 가격
OrderStack [Qnt] [4] = OrderTicket ();/주문 번호
OrderStack [Qnt] [5] = OrderLots ();/많은 금액
Mas_Tip [OrderType ()] ;/유형의 주문 수량
OrderStack [Qnt] [6] = OrderType ();/주문 유형
OrderStack [Qnt] [7] = OrderMagicNumber ();/매직 넘버
if (OrderComment () ==)
//4
OrderStack [Qnt] [8] = 0;/전혀 주석이 없다면
//삼
그밖에
//4
OrderStack [Qnt] [8] = 1;/주석이있는 경우
//삼
//2
//------------------------------------------------ --------------------- 6 -
OrderStack [0] [0] = Qnt;/주문 금액
//------------------------------------------------ ------------------------------ 7 -
FillStack (OrderStack, Trend_Up);/트렌드 방향과 초기 거래 가격을 기반으로 열린 거래 데이터를 정렬하는 함수 호출
return (0);
//1
//0
//------------------------------------------------ ------------------------------ 8 -
//
//기존 주문 정렬 함수
//
double SortStack (double OrderStack [7] [9], bool Trend_Up)/재구성 된 배열을 정렬하는 함수
//초기 주문 오픈 가격에 기초한 주문
//1
int I, TotalOrders;
TotalOrders = OrderStack [0] [0];
if (Trend_Up == true)
//2
ArraySort (OrderStack [TotalOrders] [1], TotalOrders, 1, MODE_DECEND);
//1
if (Trend_Up == false)
//2
ArraySort (OrderStack [TotalOrders] [1], TotalOrders, 1, MODE_ASCEND);
//1
FillStack (OrderStack, Trend_Up);/불리한 거래 매개 변수를 정의하는 함수를 호출합니다.
//주문 배열로 시장 거래
return (0);
//0
//
//불리한 시장 거래 매개 변수 기능 기록
//
double FillStack (OrderStack [7] [9], bool Trend_Up)/불리한 시장 거래 매개 변수 정의
//Bollinger 밴드 피어싱의 초기 주문을 기반으로합니다.
//1
두 배 가격;
PriceIn = OrderStack [1] [1];
//2
if (Trend_Up == true)
//삼
OrderStack [1] [2] = 가격 하락 - StopLossVal;/열 2, 중지 손실 항목 열
OrderStack [1] [3] = 가격 인하 0.0030;/Column 3, Profit Entry Column 가져 오기
OrderStack [2] [1] = PriceIn - 0.0010;/Column 1, Market Order Buy Price의 평균 하락
OrderStack [2] [3] = 가격 - 0.0005;/Column 3, 평균 시장 진입에 대한 수익 가져 오기
//2
if (Trend_Up == false)
//삼
OrderStack [1] [2] = 가격 In StopLossVal;/열 2, 중지 손실 항목 열
OrderStack [1] [3] = 가격 있음 - 0.0030;/Column 3, Profit Entry Column 가져 오기
OrderStack [2] [1] = PriceIn 0.0010;/Column 1, Market Order Buy Price의 평균 하락
OrderStack [2] [3] = 가격은 0.0005;/Column 3, 평균 시장 진입에 대한 수익 가져 오기
//2
//1
return (0);
//0
이 EA를 구현할 때 발생하는 문제는 컴파일러가 내 FillStack () 함수의 코드에 대해 ”배열 항목을 할당 할 수 없다”라는 오류 메시지를 표시한다는 것입니다. 난처한 점은 FillStack () 함수 위의 Terminal () 함수로 수행되는 작업과 똑같은 것입니다. 경험이있는 프로그래머 중 한 명이이 버그에 대한 치료법을 줄 수 있기를 희망합니다.
CQL과 같은 배열 요소에 값을 할당하는 기능이 MQL4에도 존재하지 않는다는 점을 MQL4가 가진 모든 유사성과 함께 믿기 어렵습니다. 고맙습니다.