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

 
Aleksey Vyazmikin :

고맙습니다! 검색했는데 안나오네요...

그런 다음 다음 질문인 25단계를 가정해 보겠습니다. 그런 다음 반올림을 25의 배수로 구성하는 방법에 대해 함수가 있을 수 있습니까?

https://www.mql5.com/ru/docs/standardlibrary/tradeclasses/csymbolinfo/csymbolinfonormalizeprice

Документация по MQL5: Стандартная библиотека / Торговые классы / CSymbolInfo / NormalizePrice
Документация по MQL5: Стандартная библиотека / Торговые классы / CSymbolInfo / NormalizePrice
  • www.mql5.com
Стандартная библиотека / Торговые классы / CSymbolInfo / NormalizePrice - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

감사합니다. 하지만 저는 표준 거래 라이브러리를 사용하지 않습니다.

 
Vladislav Andruschenko :
코드도 주석도 없습니다.

예, 이상합니다. 파일첨부했는데 확인이 안되네요. 죄책감이 드는. 이제 테스터가 [Invalid stops]라는 줄을 발행하는 코드와 코드에서 발췌한 내용을 모두 첨부합니다. 이 코드에서는 위치를 수정할 때 MqlTradeRequest 구조가 어떻게 작동 하는지 이해하고 싶습니다. 제 경우에는 SAR에서 정류장을 변경할 때. 하지만 테스터의 [Invalid stops] 메시지를 지울 수 없습니다. RTS 스플라이스 도구.

 //+------------------------------------------------------------------+
//| Модификация Stop Loss открытой позиции                           |
//+------------------------------------------------------------------+
//--- объявление запроса и результата
   MqlTradeRequest request;
   MqlTradeResult   result;

   int total= PositionsTotal (); // количество открытых позиций  
   Print ( "total = " ,total, " " );
//--- перебор всех открытых позиций
   for ( int i= 0 ; i<total; i++)
     {
       if ( PositionSelect ( _Symbol )== true ) // есть открытая позиция
        {
         //--- параметры ордера
         ulong   position_ticket= PositionGetTicket (i); // тикет позиции
         string position_symbol= PositionGetString ( POSITION_SYMBOL ); // символ 
         int     digits=( int ) SymbolInfoInteger (position_symbol, SYMBOL_DIGITS ); // количество знаков после запятой
         ulong   magic= PositionGetInteger ( POSITION_MAGIC ); // MagicNumber позиции

         if ( PositionSelect (position_symbol)) // если позицию удалось выделить, значит - позиция существует
           {
             //--- обнуление значений запроса и результата
             ZeroMemory (request);
             ZeroMemory (result);
             //--- установка параметров операции
            request.action = TRADE_ACTION_SLTP ;   // тип торговой операции
            request.position = position_ticket;   // тикет позиции
            request.symbol = position_symbol;     // символ 
            request.sl= STP;                       // Stop Loss позиции
            request.tp = 0 ;                       // Take Profit позиции

             //--- отсылаем ордер
             int number= OrderSend (request,result);
             // анализируем код возврата торгового сервера
             if (result.retcode== 10009 || result.retcode== 10008 ) //Request is completed or order placed
              {
               Alert ( "Ордер Sell успешно помещен, тикет ордера # " ,result.order, " " );
              }
             else
              {
               Alert ( "Запрос на установку ордера Sell не выполнен - код ошибки:" , GetLastError ());
               return ;
              }
           }
        }
     }
파일:
SAR_SAR.mq5  27 kb
 
DCodec :

예, 이상합니다. 파일첨부했는데 확인이 안되네요. 죄책감이 드는. 이제 테스터가 [Invalid stops]라는 줄을 발행하는 코드와 코드에서 발췌한 내용을 모두 첨부합니다. 이 코드에서는 위치를 수정할 때 MqlTradeRequest 구조가 어떻게 작동 하는지 이해하고 싶습니다. 제 경우에는 SAR에서 정류장을 변경할 때. 하지만 테스터의 [Invalid stops] 메시지를 지울 수 없습니다. RTS 스플라이스 도구.

언뜻 보기에 이것은 오류를 찾아야 하는 코드가 아닙니다. 여기서는 같은 위치의 3중 선택만이 짜증난다. 너무 많이.

잘못된 정류장에 오류가 있습니다. 아마도 이러한 정류장이 계산되는 곳에서 검색을 시작해야 할 것입니다.

 
DCodec :

예, 이상합니다. 파일첨부했는데 확인이 안되네요. 죄책감이 드는. 이제 테스터가 [Invalid stops]라는 줄을 발행하는 코드와 코드에서 발췌한 내용을 모두 첨부합니다. 이 코드에서는 위치를 수정할 때 MqlTradeRequest 구조가 어떻게 작동 하는지 이해하고 싶습니다. 제 경우에는 SAR에서 정류장을 변경할 때. 하지만 테스터의 [Invalid stops] 메시지를 지울 수 없습니다. RTS 스플라이스 도구.

완전한 이해를 위해서는 어떤 유형의 계정 헤지 또는 네팅이

계정 유형이 hadge인 경우 브리핑

 if ( PositionSelect ( _Symbol )== true ) // есть открытая позиция

우리는 심볼로 포지션을 선택했지만, 당신이 꿈꾸던 포지션이 아닐 수도 있습니다...

 ulong   position_ticket= PositionGetTicket (i); // тикет позиции

이제 우리는 필요한 위치를 정확히 선택했습니다.

함수는 열린 위치 목록에서 인덱스로 위치 티켓을 반환하고 함수를 사용하여 추가 작업을 위해 이 위치를 자동으로 선택합니다.


그런 다음 원하는 위치를 다시 선택하십시오.

 if ( PositionSelect (position_symbol)) // если позицию удалось выделить, значит - позиция существует

그리고 다시, 잘못된 위치가 선택될 확률이 매우 높습니다.

위치의 독립적 표현(ACCOUNT_MARGIN_MODE_RETAIL_HEDGING)을 사용하면 각 기호에 대해 여러 위치를 동시에 열 수 있습니다. 이 경우 PositionSelect는 티켓이 가장 작은 위치를 선택합니다.


이 경우 OrderSend() 함수가 어떻게 동작하는지 확인하려면 이렇게 해서 확인을 해야 하는데, 그대로 하는 것이 좋고, 에러가 사라지지 않았다면 에러 코드 뿐만 아니라 포지션 티켓, 포지션 가격, 새로운 스톱 가격 및 테이크. 최소입니다.

 
Alexey Viktorov :

완전한 이해를 위해서는 어떤 유형의 계정 헤지 또는 네팅이

댓글 감사합니다. 네팅 계정 유형. RTS 스플라이스 도구. 그게 모든 어려움입니까? 캐릭터당 하나의 포지션. 당신은 어떤 방법을 선택할 수 있습니다. 당신은 여전히 이 위치에 있을 것입니다. 이것은 보류 중인 주문 이 아닙니다. 그렇죠? 그러므로 나는 여전히 이해하지 못한다 - 무엇이 잘못되었는가 ??? 모든 옵션을 시도했습니다.

 
DCodec :

댓글 감사합니다. 네팅 계정 유형. RTS 스플라이스 도구. 그게 모든 어려움입니까? 캐릭터당 하나의 포지션. 당신은 어떤 방법을 선택할 수 있습니다. 당신은 여전히 이 위치에 있을 것입니다. 이것은 보류 중인 주문 이 아닙니다. 그렇죠? 그러므로 나는 여전히 이해하지 못한다 - 무엇이 잘못되었는가 ??? 모든 옵션을 시도했습니다.

그리고 이것에 대한 대답은 없을까요?

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

초보자의 질문 MQL5 MT5 MetaTrader 5

알렉세이 빅토 로프 , 2017.11.22 09:29

이 경우 OrderSend() 함수가 어떻게 동작하는지 확인하려면 이렇게 해서 확인해야 하는데, 그대로 하는 것이 좋고, 에러가 사라지지 않았다면 에러 코드 뿐만 아니라 포지션 티켓, 포지션 가격, 새로운 스톱 가격 및 테이크. 최소입니다.


 
DCodec :

그러므로 나는 여전히 이해하지 못한다 - 무엇이 잘못되었는가 ??? 모든 옵션을 시도했습니다.

오류가 발생한 곳에 이 줄을 붙여넣습니다.

 Print (ToString(request) + ToString(result));

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

mql5 언어의 특징, 미묘함 및 작업 방법

fxsaber , 2017.02.25 16:27

MqlTrade 구조를 문자열로 변환
#define TOSTRING(A)   #A + " = " + ( string )(A) + "\n"
#define TOSTRING2(A) #A + " = " + EnumToString (A) + " (" + ( string )(A) + ")\n"

string ToString( const MqlTradeTransaction &Trans )
{
   return (TOSTRING(Trans.deal) + TOSTRING(Trans.order) + TOSTRING(Trans.symbol) +
         TOSTRING2(Trans.type) + TOSTRING2(Trans.order_type) + TOSTRING2(Trans.order_state) +
         TOSTRING2(Trans.deal_type) + TOSTRING2(Trans.time_type) +
         TOSTRING(Trans.time_expiration) + TOSTRING(Trans.price) + TOSTRING(Trans.price_trigger) +
         TOSTRING(Trans.price_sl) + TOSTRING(Trans.price_tp) + TOSTRING(Trans.volume) +
         TOSTRING(Trans.position) + TOSTRING(Trans.position_by));
}

string ToString( const MqlTradeRequest &Request )
{
   return (TOSTRING2(Request.action) + TOSTRING(Request.magic) + TOSTRING(Request.order) +
         TOSTRING(Request.symbol) + TOSTRING(Request.volume) + TOSTRING(Request.price) +
         TOSTRING(Request.stoplimit) + TOSTRING(Request.sl) +  TOSTRING(Request.tp) +
         TOSTRING(Request.deviation) + TOSTRING2(Request.type) + TOSTRING2(Request.type_filling) +
         TOSTRING2(Request.type_time) + TOSTRING(Request.expiration) + TOSTRING(Request.comment) +
         TOSTRING(Request.position) + TOSTRING(Request.position_by));
}

string ToString( const MqlTradeResult &Result )
{
   return (TOSTRING(Result.retcode) + TOSTRING(Result.deal) + TOSTRING(Result.order) +
         TOSTRING(Result.volume) + TOSTRING(Result.price) + TOSTRING(Result.bid) +  
         TOSTRING(Result.ask) + TOSTRING(Result.comment) + TOSTRING(Result.request_id) +  
         TOSTRING(Result.retcode_external));
}

#undef TOSTRING
#undef TOSTRING2

 
fxsaber :

오류가 발생한 곳에 이 줄을 붙여넣습니다.


삽입됨. 테스트 결과는 다음과 같습니다.

2017.11.22 18:22:51.127 2016.11.09 12:00:00 교환 매수 1.00 RTS Splice at 98080 sl: 94130 (98070 / 98080 / 98070)
2017.11.22 18:22:51.127 2016.11.09 12:00:00 거래 #4 98080에서 1.00 RTS Splice 구매 완료(주문 #4 기준)
2017.11.22 18:22:51.127 2016.11.09 12:00:00 거래 성사 [#4 1.00 RTS Splice at 98080]
2017.11.22 18:22:51.127 2016.11.09 12:00:00 주문이 98080에서 1.00을 구매했습니다 [#4 98080에서 1.00 RTS Splice 구매]
2017.11.22 18:22:53.561 2016.11.09 14:05:00 수정 #4 실패 1.00 RTS Splice sl: 94130, tp: 0 -> sl: 94316, tp: 0 [잘못된 정류장]
2017.11.22 18:22:53.576 2016.11.09 14:05:00 Request.action = TRADE_ACTION_SLTP (6)
2017.11.22 18:22:53.576 2016.11.09 14:05:00 Request.magic = 0
2017.11.22 18:22:53.576 2016.11.09 14:05:00 Request.order = 0
2017.11.22 18:22:53.576 2016.11.09 14:05:00 Request.symbol = RTS Splice
2017.11.22 18:22:53.576 2016.11.09 14:05:00 요청 볼륨 = 0.0
2017.11.22 18:22:53.576 2016.11.09 14:05:00 요청 가격 = 0.0
2017.11.22 18:22:53.576 2016.11.09 14:05:00 Request.stoplimit = 0.0
2017.11.22 18:22:53.576 2016.11.09 14:05:00 Request.sl = 94316.0
2017.11.22 18:22:53.576 2016.11.09 14:05:00 Request.tp = 0.0
2017.11.22 18:22:53.576 2016.11.09 14:05:00 요청.편차 = 0
2017.11.22 18:22:53.576 2016.11.09 14:05:00 요청 유형 = ORDER_TYPE_BUY(0)
2017.11.22 18:22:53.576 2016.11.09 14:05:00 Request.type_filling = ORDER_FILLING_FOK (0)
2017.11.22 18:22:53.576 2016.11.09 14:05:00 Request.type_time = ORDER_TIME_GTC(0)
2017.11.22 18:22:53.576 2016.11.09 14:05:00 요청.만료 = 1970.01.01 00:00:00
2017.11.22 18:22:53.576 2016.11.09 14:05:00 Request.comment =
2017.11.22 18:22:53.576 2016.11.09 14:05:00 요청 포지션 = 4
2017.11.22 18:22:53.576 2016.11.09 14:05:00 Request.position_by = 0
2017.11.22 18:22:53.576 2016.11.09 14:05:00 Result.retcode = 10016
2017.11.22 18:22:53.576 2016.11.09 14:05:00 결과.거래 = 0
2017.11.22 18:22:53.576 2016.11.09 14:05:00 Result.order = 0
2017.11.22 18:22:53.576 2016.11.09 14:05:00 결과.볼륨 = 0.0
2017.11.22 18:22:53.576 2016.11.09 14:05:00 결과.가격 = 0.0
2017.11.22 18:22:53.576 2016.11.09 14:05:00 Result.bid = 0.0
2017.11.22 18:22:53.576 2016.11.09 14:05:00 Result.ask = 0.0
2017.11.22 18:22:53.576 2016.11.09 14:05:00 Result.comment = 잘못된 정류장
2017.11.22 18:22:53.576 2016.11.09 14:05:00 Result.request_id = 0
2017.11.22 18:22:53.576 2016.11.09 14:05:00 Result.retcode_external = 0
2017.11.22 18:22:53.576 2016.11.09 14:05:00 경고: TP 및 SL에 의한 위치 수정 오류 오류 코드: 4756

 
DCodec :

삽입됨. 다음은 테스터의 결과입니다.

서버 및 테스터 모드?

사유: