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

 
Vadim Novikov :

무관심하지 않은 모든 사람들에게 좋은 하루 !!!


저는 고급 사용자입니다. 하지만 자주 쓰지는 않습니다. 그 이유입니다. 나는 몇 가지 혁신을 따라갈 수 없습니다. 그리고 가끔은 그냥 잊어버리곤 합니다.


한 가지 문제를 도와주세요. 한 순간도 기억나지 않는다.


상황은 이렇다. 여기에서 외부 변수를 설정합니다. 그러한 변수를 많이 설정하십시오. 20개의 변수. 이 프로그램을 차트에 첨부하면 프로그램의 입력 메뉴에 표시됩니다.


질문은 ~이야. 어떻게 내가 기억하지 않을 수 있습니다. 주석으로 그러한 변수의 블록을 분리하는 방법은 무엇입니까? 그래서 그랬다. 입력 메뉴에서. 예를 들어:


MA 변수를 변경하기 위한 블록입니다(코멘트).

석사 기간

MA 설정 방법

MA 가격

MACD 변수(주석)를 변경하기 위한 블록입니다.

...........................

...........................

...........................

BB변수를 변경하기 위한 블록입니다(코멘트)

...........................

...........................................

...........................


이전에 코드에 주석 기능을 사용하여 이러한 주석을 도입한 것 같습니다. 즉, 그는 // 또는 /* */를 썼습니다. 하지만 지금은 뭔가 부족합니다.

   extern string      a1             = "Это  блок  по  изменению   переменных   MA (комментарий)" ;
   ..............
   ..............
   ..............
   extern string      a2             = "Это  блок  по  изменению  переменных   MACD (комментарий)" ;

이 같은

 
OrderStopLoss()는 소수점 이하 두 자리를 출력합니다.
세 글자를 표시하도록 강제할 수 있습니까?
 
Alekseu Fedotov :

이 같은

고맙습니다. 기억!!!

 
Igor Golieniev :

다음과 같이 시도하십시오.

 Print ( "SL: " , DoubleToString ( OrderStopLoss (), Digits ()));

이것은 견적의 모든 유효 숫자를 표시하기 위한 것입니다. 다른 수의 문자가 필요한 경우 Digits() 를 특정 숫자로 바꾸십시오.

 
좋은 저녁, 말씀해주세요. OnInit에서 함수는 두 개의 수평선을 만들고 OnTick에는 두 개의 함수가 있습니다. 하나는 Bid > 첫 번째 줄, 두 번째는 Bid < 두 번째 줄이면 푸시 및 메일 알림을 보냅니다. Bid=line은 격차를 배제하지 않았습니다. 당연히 조건이 충족되면 알림이 모든 틱과 함께 제공된다는 사실에 즉시 직면했습니다. 이는 좋지 않습니다. 이 문제를 해결하는 방법은 무엇입니까? 표준 경고 설정에서 시간 초과를 설정하거나 알림 수를 설정할 수 있지만 Expert Advisor에서 어떻게 할 수 있습니까?
 
Ihor Herasko :

다음과 같이 시도하십시오.

이것은 견적의 모든 유효 숫자를 표시하기 위한 것입니다. 다른 수의 문자가 필요한 경우 Digits()를 특정 숫자로 바꾸십시오.

이제 Print에서 15,155를 올바르게 인쇄하지만 OrderModify 기능 에 대한 유효하지 않은 정지 손실

이 문제는 OrderModify의 Silver에만 있습니다.

 void Trailing()
  {
   if ( Digits == 3 || Digits == 5 )
     {
      TrailingStep *= 10 ;
      TrailingOpen *= 10 ;
      TrailingStop *= 10 ;
     }
   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--)
     {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
        {
         if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==Magic)
           {
             if ( OrderType ()== OP_BUY )
              {
               if ( Bid > OrderOpenPrice ()+TrailingOpen* Point )
                 {
                   if ( OrderStopLoss ()< Bid -(TrailingStop+TrailingStep)* Point )
                    {
                     if (! OrderModify ( OrderTicket (), OrderOpenPrice (), NormalizeDouble ( Bid - Point *TrailingStop, Digits ), 0 , 0 ))
                         Print ( "Oshibka =" , DoubleToString ( OrderStopLoss (), Digits ()));
                    }
                 }
              }
             if ( OrderType ()== OP_SELL )
              {
               if ( Ask < OrderOpenPrice ()-TrailingOpen* Point )
                 {
                   if ( OrderStopLoss ()> Ask +(TrailingStop+TrailingStep)* Point )
                    {
                     if (! OrderModify ( OrderTicket (), OrderOpenPrice (), NormalizeDouble ( Ask +TrailingStop* Point , Digits ), 0 , 0 ))
                         Print ( "Oshibka" , DoubleToString ( OrderStopLoss (), Digits ()));
                    }
                 }
              }
           }
        }
     }
  }
 
Igor Golieniev :

이제 Print에서 15,155를 올바르게 인쇄하지만 OrderModify 기능 에 대한 유효하지 않은 정지 손실

이 문제는 OrderModify의 Silver에만 있습니다.

위 코드에는 두 가지 오류가 있습니다.

  1. 최소 허용 정류장 크기 확인 부족(Stop Level이라고 함).
  2. 실수의 잘못된 비교.

첫 번째 문제를 해결 하려면 현재 정지 수준을 가져와야 합니다.

 double fStopLevel = SymbolInfoInteger ( Symbol (), SYMBOL_TRADE_STOPS_LEVEL ) * Point ();

fStopLevel이 0과 같고 계정 유형이 ECN이 아닌 경우 fStopLevel은 3개의 스프레드와 같아야 합니다.

손절매(손절매와 이익실현)를 설정하기 전에 새 수준이 주문 종가와 손절 수준 이상으로 분리되어 있는지 확인하십시오. 매수 주문의 중지를 확인하려면 다음과 같이 하십시오.

 if ( Bid - fNewSL - fStopLevel < - Point () / 10 )
{
   // Такой стоп ставить нельзя. Ближайший возможный уровень: Bid - fStopLevel
}

판매 주문 중지의 경우:

 if (fNewSL - Ask - fStopLevel < - Point () / 10 )
{
   // Stop Loss на цене fNewSL ставить нельзя. Ближайший возможный уровень: Ask + fStopLevel
}


두 번째 문제의 해결책 : 실수의 평등은 항상 어디서나 달성 될 수 없기 때문에 실제 값을 약간의 정확도로 비교하십시오. 정지 레벨의 정확성을 확인하기 위한 코드에서 이미 위의 비교 예를 제공했습니다.

 
Ihor Herasko :

위 코드에는 두 가지 오류가 있습니다.

  1. 최소 허용 정류장 크기 확인 부족(Stop Level이라고 함).
  2. 실수의 잘못된 비교.

첫 번째 문제를 해결 하려면 현재 정지 수준을 가져와야 합니다.

fStopLevel이 0과 같고 계정 유형이 ECN이 아닌 경우 fStopLevel은 3개의 스프레드와 같아야 합니다.

손절매(손절매와 이익실현)를 설정하기 전에 새 수준이 주문 종가와 손절 수준 이상으로 분리되어 있는지 확인하십시오. 매수 주문의 중지를 확인하려면 다음과 같이 하십시오.

판매 주문 중지의 경우:


두 번째 문제의 해결책 : 실수의 평등은 항상 어디서나 달성 될 수 없기 때문에 실제 값을 약간의 정확도로 비교하십시오. 정지 레벨의 정확성을 확인하기 위한 코드에서 이미 위의 비교 예를 제공했습니다.

고맙습니다.

그러나 문제가 종료되지 않았습니다. OrderModify는 주문이 열리면 즉시 작업을 시작합니다. 실수는 어디에 있습니까? (반복합니다 - 모든 (모든) 통화/선물, 은에서 작동합니다 - 아니요)

 
Igor Golieniev :

고맙습니다.

그러나 문제가 종료되지 않았습니다. OrderModify는 주문이 열리면 즉시 작업을 시작합니다. 실수는 어디에 있습니까? (반복합니다 - 모든 (모든) 통화/선물, 은에서 작동합니다 - 아니요)

1. 지시

 #property strict

당신은 사용합니까?

2. 매수 및 매도 시에만 발생합니까 아니면 매도 시에만 발생합니까?

3. 손절매는 포지션을 때 배치됩니까, 아니면 가능하면 배치 및 풀을 위해 추적해야 합니까?

Совершение сделок - Торговые операции - MetaTrader 5
Совершение сделок - Торговые операции - MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 
Igor Golieniev :

고맙습니다.

그러나 문제가 종료되지 않았습니다. OrderModify는 주문이 열리면 즉시 작업을 시작합니다. 실수는 어디에 있습니까? (반복합니다 - 모든 (모든) 통화/선물, 은에서 작동합니다 - 아니요)

시장 주문의 시작과 수정 사항을 볼 수 있는 로그(온라인인 경우 전문가 탭)에서 발췌한 내용을 표시하고 사용된 TrailingStop 및 TrailingStep 값을 표시합니다.