초보자의 질문 MQL5 MT5 MetaTrader 5 - 페이지 63

 

Gumko :

Gumko : 그리고 첫 번째 작업이 나타날 때까지 얼마나 걸립니까?…

2일 동안의 가치

나는 8-10일을 기다렸다가 침을 뱉고 껐다.
 
테스터 프로그램의 백그라운드 작업 시 최대 프로세서 부하가 얼마인지 궁금합니다.
 

안녕 모두.

수정 및 문제.

외부 기능:

bool ModifyPosition(const 문자열 기호, 이중 손절매, 이중 이익 실현){
//---- 구조에 대해 선언하고 검색 엔진에 결과를 표시합니다.
MqlTradeRequest 요청;
MqlTradeResult 결과;
//---- 수정된 위치에 대한 MqlTradeRequest 거래 검색의 구조적 초기화
요청.액션 = TRADE_ACTION_SLTP ;
request.symbol = 기호;
request.sl = 손절매;
request.tp = 이익 창출;
문자열 단어 = "";
StringConcatenate(단어,
"<<< =========== Modifyposition(): 위치 수정 ",
기호," ============ >>>");
인쇄(단어);
//---- 위치 수정 및 대상 검색 결과 확인
if(!OrderSend(요청, 결과) || result.deal==0)
{
Print("오류 수정=", GetLastError());
반환(거짓);
}
반환(참);
}

하지만 작동하지 않습니다.

어떻게 할 것인가?

감사해요 :)

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций - Документация по MQL5
 
mario065 : 하지만 작동하지 않습니다. 수행하는 방법? 감사해요 :)

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

 MqlTradeRequest request={ 0 };
MqlTradeResult   result ={ 0 };
 
Yedelkin :

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

예델킨,

감사합니다.

함수 호출 시작 시 제대로 계산되는지 확인했습니다.

내가 한 방법은 다음과 같습니다.

이중 입찰 = NormalizeDouble(SymbolInfoDouble(Currency,SYMBOL_BID),_Digits);
이중 질문 = NormalizeDouble(SymbolInfoDouble(Currency,SYMBOL_ASK),_Digits);
더블 오픈 = NormalizeDouble(PositionGetDouble( POSITION_PRICE_OPEN ),_Digits);
이중 SL = NormalizeDouble(PositionGetDouble(POSITION_SL),_Digits);
if(열기 > 0){
start_buy = 묻기 - 열기;Print("start_buy=",start_buy);
start_sel = 공개 - 입찰;Print("start_sel=",start_sel);
}

로그의 놀라움:

MR 0 코어 1 10:21:49 2012.10.01 01:12:42 거래 #2 1.28146에서 0.10 EURUSD 매도 완료(주문 #2 기준)
GH 0 Core 1 10:21:49 2012.10.01 01:12:42 거래 수행 [#2 매도 0.10 EURUSD at 1.28146]
NI 0 Core 1 10:21:49 2012.10.01 01:12:42 주문 실행 0.10 at 1.28146 [#2 매도 0.10 EURUSD at 1.28146 (0.00000)]
OF 0 코어 1 10:21:49 2012.10.01 01:12:43 start_buy=0.0001299999999999635
DR 0 코어 1 10:21:49 2012.10.01 01:12:43 start_sel=5.000000000010552e-005
LE 0 코어 1 10:21:49 2012.10.01 01:12:43 start_buy=0.0001099999999998325
EN 0 코어 1 10:21:49 2012.10.01 01:12:43 start_sel=7.00000000000145e-005

물론 마을에 대한 해석이 흥미 롭습니다. 그러한 숫자는 어디에서 왔습니까?

다음과 같이 함수를 올바르게 작성한 것 같습니다.

SL&TP 수정

StopLoss 및/또는 TakeProfit 수준을 수정하기 위한 거래 주문. 4개의 필드가 필요합니다.

  • 행동
  • 기호
  • 티피
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства позиций
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства позиций
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства позиций - Документация по MQL5
 
mario065 : 감사합니다. 작동하지 않았습니다.

그렇다면 정확히 "작동하지 않은" 것은 무엇입니까?

mario065 : 함수 호출 시작에 대해 올바르게 계산되는지 확인했습니다. 내가 한 방법은 다음과 같습니다.

코드를 올바르게 붙여넣습니다 (Ctrl+Alt+M):

   double Bid  = NormalizeDouble ( SymbolInfoDouble (Currency, SYMBOL_BID ), _Digits );
   double Ask  = NormalizeDouble ( SymbolInfoDouble (Currency, SYMBOL_ASK ), _Digits );
   double Open = NormalizeDouble ( PositionGetDouble ( POSITION_PRICE_OPEN ), _Digits );
   double SL   = NormalizeDouble ( PositionGetDouble ( POSITION_SL ), _Digits );
   if (Open > 0 )
    {
     start_buy = Ask - Open; Print ( "start_buy=" ,start_buy);
     start_sel = Open - Bid; Print ( "start_sel=" ,start_sel);
    }

여기서 정규화는 다른 순서로 사용해야 합니다.

1. SymbolInfoDouble (Currency, SYMBOL_BID ) 유형 값은 서버에서 가져오기 때문에 이미 정규화된 것으로 간주됩니다. 그리고 두 번째로 정규화할 필요는 없습니다. 저것들. 다음과 같이 작성할 수 있습니다.

 double Bid  = SymbolInfoDouble (Currency, SYMBOL_BID );

2. 그러나 산술 연산 후에 정규화가 사라지므로 정규화된 숫자를 가져와야 하는 경우 다음과 같이 작성해야 합니다.

start_buy = NormalizeDouble (Ask - Open, _Digits );

나머지는 생각하고 있습니다.

 
mario065 : 로그의 놀라움:

DR 0 코어 1 10:21:49 2012.10.01 01:12:43 start_sel=5.000000000010552e-005
EN 0 코어 1 10:21:49 2012.10.01 01:12:43 start_sel=7.00000000000145e-005

물론 마을에만 관심이 있습니다. 그러한 숫자는 어디에서 왔습니까?

7.00000000000145e-005 는 실수 값을 쓰는 한 가지 방법일 뿐입니다. "과학적"이라고 생각합니다. 자세한 내용은 " MQL5 참조 / 언어 기본 / 데이터 유형 / 실수 유형(이중, 부동)"을 참조하십시오.
 
Yedelkin :
7.00000000000145e-005 는 실수 값을 쓰는 한 가지 방법일 뿐입니다. "과학적"이라고 생각합니다. 자세한 내용은 " MQL5 참조 / 언어 기본 / 데이터 유형 / 실수 유형(double, float)"을 참조하십시오.

예델킨,

문제를 맡아주셔서 감사합니다.

다음은 코드입니다. 포지션을 여는 함수는 Nikolay Kositsin.Nikolay Kositsin이 작성했습니다.

파일:
MTB_E.mq5  9 kb
 
2번 창에 속하는 Expert Advisor MA에 표시 방법과 위치를 알려주세요.
예를 들어 MA를 MFI에 추가했는데 이 MA를 EA에 등록하고 싶습니다. 방법이나 위치를 모르겠습니다.

답변자님 답변 감사합니다)
 
mario065 : 다음은 코드입니다. 위치를 여는 함수는 Nikolai Kositzin이 작성했습니다. 니콜라이 코시친.

1. 나는 이것을 말하고 싶다: 당신은 매우 주의해서 다른 사람의 코드를 사용해야 한다. 다른 사람의 코드도 다른 사람의 실수이기 때문입니다.

2. 여기( https://www.mql5.com/ru/forum/6343/page64#comment_357008 ) 변수를 사용하기 전에 올바르게 재설정해 볼 것을 제안했습니다. 그러나 귀하의 코드에서 이 제안은 아직 구현되지 않았습니다. 또한 코드에는 다음 유형의 구성이 있습니다.

 //+------------------------------------------------------------------+
//| Modify position.                                                 |
//+------------------------------------------------------------------+
bool ModifyPosition( const string symbol, double StopLoss, double Takeprofit)
  {
//---- обявяване на структурата и резултата на търговското искане
   MqlTradeRequest request;
   MqlTradeResult result;
//---- структурна инициализация на  търговското искане MqlTradeRequest за модифициране на  позиция
   request.action       = ...
   request.symbol       = ...
   request.sl           = ...
   request.tp           = ...
   ...
//---- модифицираме позицията и  проверяваме резултата от търговското искане
   if (! OrderSend (request,result) || result.deal== 0 )
     {
      ...
     }
   ZeroMemory (request);
   ZeroMemory (result);
   return ( true );
  }

이 구성에서 요청 및 결과 변수는 사용 전이 아니라 사용 후에 재설정됩니다. 또한 이러한 지역 변수를 0으로 만든 후 함수는 작업을 중지합니다. 즉, 이러한 0으로 설정 자체는 의미가 없습니다. 즉, 이러한 구성은 MqlTradeRequestMqlTradeResult 유형 의 변수 를 재설정하지 않는 방법에 대한 명확한 예입니다. 따라서 원하는 경우 결국 변수를 올바르게 재설정하십시오. 작동하지 않는 경우 정확히 "작동하지 않는" 것이 무엇인지 자세히 설명하십시오.

3. 표준 라이브러리에 " MQL5 Reference / Standard Library / Trade Classes / CTrade" 거래 클래스가 있습니다. 어떻게 하면 실천할 수 있을지 고민해보세요. 언어 몰입의 초기 단계에서는 이 수업으로 충분할 수 있습니다. 예를 들어, 이 클래스에는 " MQL5 Reference / Standard Library / Trade Classes / 2 CTrade / PositionModify" 메소드가 있습니다. 다음과 같이 구현됩니다.

 //+------------------------------------------------------------------+
//| Modify specified opened position                                 |
//+------------------------------------------------------------------+
bool CTrade::PositionModify( const string symbol, const double sl, const double tp)
  {
//--- check stopped
   if ( IsStopped ( __FUNCTION__ )) return ( false );
//--- clean
   ClearStructures();
//--- setting request
   m_request.action= TRADE_ACTION_SLTP ;
   m_request.symbol=symbol;
   m_request.magic =m_magic;
   m_request.sl    =sl;
   m_request.tp    =tp;
//--- action and return the result
   return ( OrderSend (m_request,m_result));
  }

'ClearStructures();' 사용 하기 전에 m_request 변수를 재설정합니다.

사유: