초보자의 질문 MQL4 MT4 MetaTrader 4 - 페이지 121

 
Ihor Herasko :

적어도 하나의 블록을 작성하고 표시하십시오. 이 경우 더 여기에 프롬프트가 표시됩니다.

배열로: 여기에서 전역 수준에서 4개의 배열을 선언했습니다.

 // массивы, в которых будут храниться характеристики ордеров:
int _OrderTicket[],_OrderType[];
double _OrderOpenPrice[];
datetime _OrderOpenTime[];

그런 다음 위치 열기 기능에서 0으로 재설정합니다.

   // обнуляем массивы
   ArrayInitialize (_OrderTicket, 0 );
   ArrayInitialize (_OrderType, 0 );
   ArrayInitialize (_OrderOpenPrice, 0 );
   ArrayInitialize (_OrderOpenTime, 0 );

이제 어떻게 채우나요? 이 작업을 수행하려는 예제에서는 추가 변수가 적용되지만 사용 방법을 이해하지 못합니다.

 // переменная, которая будет хранить количество ордеров, 
// принадлежащих эксперту:
int _ExpertOrdersTotal= 0 ;

이 모든 배열이 필요한 이유는 완전히 명확하지 않지만 해당 함수를 사용하여 티켓, 포지션 유형, 오픈 가격 및 오픈 시간의 값을 얻을 수 있을 때.

 
novichok2018 :

배열로: 여기에서 전역 수준에서 4개의 배열을 선언했습니다.

그런 다음 위치 열기 기능에서 재설정합니다.

이제 어떻게 채우나요? 이 작업을 수행하려는 예제에서는 추가 변수가 적용되지만 사용 방법을 이해하지 못합니다.

이 모든 배열이 필요한 이유는 완전히 명확하지 않지만 해당 함수를 사용하여 티켓, 포지션 유형, 오픈 가격 및 오픈 시간의 값을 얻을 수 있을 때.

경고 기능 (. 예를 들어

 int ord= OrdersTotal ();
if ! ord )
{
   Alert ( "Ордера отсутствуют. Выход" );
   return ;
} else    Alert ( "Всего ордеров = " , ord);

// Посмотрев, что получилось, добавляете:
int n;
int Ords[ 10 ];
for (n= 0 ; n<ord && n< 10 ; n++)
{
   OrderSelect (...
}

그리고 누군가의 본보기를 들자면 완전히 취해서 공부하십시오. 예제 작성자가 배열을 추가한 이유를 누가 압니까?

 
novichok2018 :

배열로: 여기에서 전역 수준에서 4개의 배열을 선언했습니다.

구조체 배열을 사용합니다. 그를 다루는 것이 훨씬 쉬울 것입니다. 정적 배열이 있는 변형을 제공합니다. 더 이해하기 쉽습니다. 나 자신은 동적 배열을 사용하지만. 그러나 그들과 함께 코드가 조금 더 나올 것입니다.

 #define MAX_ORDERS_CNT   int(500)
struct OrderInfo
{
   int       nTicket;
   int       nType;
   double    fOpenPrice;
   double    fSL;
   double    fTP;
   datetime dtOpenTime;
};

OrderInfo  arrstOrderInfo[MAX_ORDERS_CNT];

그런 다음 위치 열기 기능에서 0으로 재설정합니다.

아니요, 취소하지 않았습니다. 결국, 기본적으로 크기가 0인 동적 배열이 선언됩니다. 따라서 이 경우 이 네 줄의 코드는 아무 작업도 수행하지 않습니다.

이제 어떻게 채우나요? 이 작업을 수행하려는 예제에서는 추가 변수가 적용되지만 사용 방법을 이해하지 못합니다.

다음으로 각 "자신의" 주문이 배열에 저장되는 주문 루프가 구성됩니다.

g_nOrderCnt = 0 ;
for ( int i = OrdersTotal () - 1 ; i >= 0 ; --i)
{
   if (! OrderSelect (i, SELECT_BY_POS ))
       continue ;

   if ( OrderSymbol () != Symbol ())   // Если нужны ордера только по текущему символу, к графику которого прикреплен советник
       continue ;

   if ( OrderMagicNumber != i_nMagicNumber)   // Если имеется входной параметр советника i_nMagicNumber, в котором указан ID ордеров советника
       continue ;

   if (g_nOrderCnt < MAX_ORDERS_CNT)
       continue ;

   g_arrstOrderInfo[g_nOrdersCnt].nTicket = OrderTicket ();
   g_arrstOrderInfo[g_nOrdersCnt].nType = OrderType ();
   g_arrstOrderInfo[g_nOrdersCnt].fOpenPrice = OrderOpenPrice ();
   g_arrstOrderInfo[g_nOrdersCnt].fSL = OrderStopLoss ();
   g_arrstOrderInfo[g_nOrdersCnt].fTP = OrderTakeProfit ();

   ++g_nOrdersCnt;
}

이 모든 배열이 필요한 이유는 완전히 명확하지 않지만 해당 함수를 사용하여 티켓, 포지션 유형, 오픈 가격 및 오픈 시간의 값을 얻을 수 있을 때.

일반적으로 이 Expert Advisor가 계정의 모든 주문을 처리할 필요는 없기 때문에 어레이로 작업하는 것이 더 편리하고 빠릅니다. 결과적으로 시간과 비용을 절약할 수 있습니다.

또한, 나는 다시 일반적인 경우를 주었다. 물론 보편주의가 항상 필요한 것은 아닙니다. 일반적으로 이러한 배열은 전략의 요구 사항에 따라 컴파일됩니다. 예를 들어 주문을 Buy, Sell, BuyStop, SellStop, BuyLimit, SellLimit 유형별로 즉시 나눌 수 있습니다. 그런 다음 4개의 이러한 배열이 필요합니다. 그러나 거래 결정을 내릴 때 미결 주문의 전체 목록을 다시 검토할 필요는 없습니다. 특정 유형의 주문 수를 알아내고 필요한 배열을 참조하는 것으로 충분합니다.

고려해야 할 또 다른 중요한 점은 하나의 틱을 처리하는 과정에서 주문 구성의 변경입니다. OnTick 입구에서 하나의 주문 목록이 수신되고 중간 어딘가에 다른 주문이 수신될 수 있습니다. 찾기 힘든 프로그램 오류가 발생합니다. 그리고 OnTick을 입력할 때 컴파일된 주문 배열은 변경되지 않습니다(물론 프로그램 실행 중에 직접 변경하지 않는 한).

 
STARIJ :

문자열 s=파일읽기문자열(F1); // 텍스트 파일의 다음 줄 읽기
StringSplit(s, ",", a); // 쉼표로 구분된 문자열 요소를 배열로 추출
날짜 시간 T1=StrToTime(a[4]); // 다음으로 변형이 있습니다 ...
int ord=StrToInteger(a[8]);
이중 가격=StrToDouble(a[12]);

고마워, 내가 원했던



또한 5개의 제품이 만들어지는 것으로 밝혀졌습니다.

경고(모든)에 표시를 던집니다.

예: 레벨 "200"

경고가 발생하면 무언가가 포즈를 취하고 무언가가 스스로 제거하고 다른 작업을 수행합니다. 이런 식으로 신호 메커니즘을 구현하고 싶습니다.


Z.Y

내가 원하는 것을 추가했고 고려를 위해 던질 수 있습니다. 배수가 잘 됩니다. 그러나 이것은 여기에서 허용되지 않습니다.

 
Ihor Herasko :

예를 들어 주문을 Buy, Sell, BuyStop, SellStop, BuyLimit, SellLimit 유형별로 즉시 나눌 수 있습니다. 그런 다음 4개의 이러한 배열이 필요합니다. 그러나 거래 결정을 내릴 때 미결 주문의 전체 목록을 다시 검토할 필요는 없습니다. 특정 유형의 주문 수를 알아내고 필요한 배열을 참조하는 것으로 충분합니다.

그것이 바로 내가 필요로 하는 것, 또는 오히려 구매 및 판매 에만 필요한 것입니다. 내 간단한 전략의 경우 중요한 것은 열린 위치가 마감 조건을 보기 위해 서로 간섭하지 않는다는 것입니다. 배열 없이도 여전히 할 수 있습니까? 글쎄, 나는 그것들을 이해하지 못한다. 만드는 방법, 돌리는 방법-어두운 숲. 아마도 당신은 화면에서 내 상황을 이해할 것입니다.

코드의 모든 것이 간단하고 명확하게 작동하는 것처럼 보이지만 이것은 오해의 유일한 경우입니다.

 
novichok2018 :

그것이 바로 내가 필요하거나 오히려 구매 및 판매 에만 필요한 것입니다. 내 간단한 전략의 경우 가장 중요한 것은 열린 위치가 마감 조건을 보기 위해 서로 간섭하지 않는다는 것입니다. 배열 없이도 여전히 할 수 있습니까? 글쎄, 나는 그들을 이해하지 못한다. 어떻게 창조하고, 어떻게 돌릴 것인가-어두운 숲. 아마도 당신은 화면에서 내 상황을 이해할 것입니다.

코드의 모든 것이 간단하고 명확하게 작동하는 것처럼 보이지만 이것은 오해의 유일한 경우입니다.

물론 배열이 없는 가장 단순한(그리고 중간 정도의 복잡성)에서는 더 편리합니다. 수백 개의 주문을 사용할 때입니다. 그러면 ... 그리고 주문을 쉽게 구별할 수 있습니다. 예를 들어, OrderType()에 따르면 하나는 0개를 구매하고 다른 하나는 1개를 판매합니다. 그리고 전략이 좋습니다. 하루에 10개를 늘리거나 반나절에 병합할 수 있습니다. 이 화살을 잡는 방법만 있으면 됩니다. 그리고 예, 그들은 종종 상처를 입습니다. 먼저 신호를 발행하는 방법을 배우는 것이 합리적입니다. 매수 및 매도
 
LRA :
물론 배열이 없는 가장 단순한(그리고 중간 정도의 복잡성)에서는 더 편리합니다. 그 때 수백 가지 주문을 사용할 수 있습니다. 그런 다음 ...

그리고 그것이 내 상황에 대한 이유가 될 수 없습니다. 2018.01.25 20:22:12 2018_WPR14_AMarkets EURUSD,M5: OrderClose error 138 및 계속 반복

2018.01.26 16:38:12 2018_WPR14_AMarkets EURUSD,M5: 경고: 총 주문 = 3 ? 스크린샷은 이 기간이 매도를 마감하기 위한 두 가지 조건을 포착함을 보여줍니다.

그리고 포지션을 여는 신호는 여러 지표의 조합으로 주어지며 한 번에 하나씩 닫힙니다. 그리고 그들은 자주 작동하지 않습니다. 5 분 세션에서 며칠 동안 침묵합니다. 예를 들어 올해 2월 1일부터. 14개의 직위만 일했습니다.


 
novichok2018 :

그리고 그것이 내 상황에 대한 이유가 될 수 없습니다. 2018.01.25 20:22:12 2018_WPR14_AMarkets EURUSD,M5: OrderClose error 138 및 계속 반복

2018.01.26 16:38:12 2018_WPR14_AMarkets EURUSD,M5: 경고: 총 주문 = 3 ? 스크린샷은 이 기간이 매도를 마감하기 위한 두 가지 조건을 포착함을 보여줍니다.

어떤 상황이었나요? 터미널이 오류를 일으키는 로그에 쓰고 있다는 말씀이신가요? ... 그리고 138은 무엇을 의미합니까? 어디를 봐야하는지 알아? 어떻게 이것을 달성 했습니까? 이것은 매우 드문 실수입니다. 화면에서 볼 수 있는 것은 전투의 절반입니다. 고문에게 설명하는 방법은 다음과 같습니다. 일종의 수학적 조건을 작성해야 합니다. 고문은 화면을 보는 대신 숫자로 작동합니다.

 
LRA :

터미널이 오류를 일으키는 로그에 쓰고 있다는 말씀이신가요? ... 그리고 138은 무엇을 의미합니까? 어디를 봐야하는지 알아?

아니요, 나는이 역사의 기간에 테스터에서 장애가 발생하여 신호가 올바르게 작동하지 않는다고 말하고 싶습니다. 재인용 은 며칠 동안 지속될 수 없기 때문입니다.

 
novichok2018 :

아니요, 나는이 역사의 기간에 테스터에서 장애가 발생하여 신호가 올바르게 작동하지 않는다고 말하고 싶습니다. 재인용은 며칠 동안 지속될 수 없기 때문입니다.

테스터 에서 인용? 처음 들었을 때 ... 테스터가 이상적입니다. 미끄러짐도 없습니다.

...지표에 부담을 주는 것이 있습니다. 추세가 상승하고 있습니다. 나는 그것을 살 것입니다 ... 밝혀졌습니다 ... 충분하지 않지만 TP를 올리고 싶었습니다. 이미 작동했습니다 ...

따라서 조언자를 입력하여 그렇다면 종료하고 다음 틱에서 계속하십시오. 그리고 데모에서 사용해 보세요