mql5 언어의 특징, 미묘함 및 작업 방법 - 페이지 208 1...201202203204205206207208209210211212213214215...247 새 코멘트 fxsaber 2021.08.12 17:38 #2071 mktr8591 : 제가 거래 상황을 잘못 이해한 것 같습니다. 내가 상상한 대로: 보류 중인 지정가 주문은 여러 거래로 채워졌습니다. 이 모든 시간 동안 그것은 실시간 주문에 매달렸고 ORDER_TIME_SETUP 필드는 상수가 아니었습니다. 마지막 거래 후 그는 역사에 기록되었습니다. 이 시점에서 ORDER_TIME_SETUP 은 상수가 되었습니다. 아니면 틀렸나요? ORDER_TIME_SETUP은 항상 상수입니다. 내가 역사에 들어갔을 때 ORDER_TIME_DONE이 나타났습니다. mktr8591 2021.08.12 17:43 #2072 fxsaber : ORDER_TIME_SETUP은 항상 상수입니다. 내가 역사에 들어갔을 때 ORDER_TIME_DONE이 나타났습니다. 이제 지연 제한을 설정하고 있습니다. 그런 다음 내 손으로 변경하고 스크립트와 ORDER_TIME_SETUP 을 변경합니다. 내가 무엇을 잘못하고 있지? mktr8591 2021.08.12 17:57 #2073 과거에 유사한 사례에 대해 이미 게시했습니다. https://www.mql5.com/ru/forum/170952/page170#comment_15824249 https://www.mql5.com/ru/forum/170952/page172#comment_15829154 Особенности языка mql5, тонкости и приёмы работы 2020.04.09www.mql5.com В данной теме будут обсуждаться недокументированные приёмы работы с языком mql5, примеры решения тех, или иных задач... fxsaber 2021.08.12 18:04 #2074 mktr8591 : 이제 지연 제한을 설정하고 있습니다. 그런 다음 내 손으로 변경하고 스크립트와 ORDER_TIME_SETUP 을 변경합니다. 내가 무엇을 잘못하고 있지? 이것은 노출 시간을 변경하지 않습니다. fxsaber 2021.08.12 18:07 #2075 mktr8591 : 과거에 유사한 사례에 대해 이미 게시했습니다. https://www.mql5.com/ru/forum/170952/page170#comment_15824249 https://www.mql5.com/ru/forum/170952/page172#comment_15829154 과연, 포스트. 하지만 전혀 기억나지 않았다. 버그라고 생각합니다. fxsaber : 부분실행을 반복하면 어떻게 될지 모르겠습니다. 이제 나는 이 브로커(나는 그들의 소프트웨어에 오류가 있는 쪽으로 기울고 있다)가 더 이상 변경되지 않을 것임을 압니다. fxsaber 2021.09.08 12:15 #2076 // Возвращает снепшот котирования символа. int QuotesSnapshot( const string Symb = NULL , const datetime From = 0 ) { int Snapshot = INT_MAX ; MqlTick Ticks[]; #define DAY ( 24 * 3600 ) const int Size = CopyTicksRange (Symb, Ticks, COPY_TICKS_INFO , From ? From * 1000 : SymbolInfoInteger (Symb, SYMBOL_TIME ) / DAY * DAY * 1000 ); #undef DAY for ( int i = 1 ; i < Size; i++) { const int Interval = ( int )(Ticks[i].time_msc - Ticks[i - 1 ].time_msc); if (Interval < Snapshot) Snapshot = Interval; } return (Snapshot); } 때때로 틱이 브로드캐스트되는 빈도를 아는 것이 유용합니다. fxsaber 2021.09.16 16:44 #2077 CloseBy 작업은 두 개의 거래를 생성합니다. 첫 번째(CloseBy의 첫 번째 위치) 거래의 스왑에는 두 위치의 스왑 합계가 포함됩니다. 두 번째 거래의 스왑은 0입니다. CloseBy를 통해 위치를 부분적으로 청산하면 열린 위치의 나머지 부분에서 스왑이 박탈되고 0으로 재설정됩니다. // Демонстрация работы со свопами во время частичного закрытия через CloseBy. #define REPORT_TESTER // В тестере будут автоматически записываться отчеты #define REPORT_BROWSER // Создание отчета с запуском браузера - требует разрешения DLL. #include <Report.mqh> // https://www.mql5.com/ru/code/18801 #define Ask SymbolInfoDouble ( _Symbol , SYMBOL_ASK ) void OnTick () { static bool FirstRun = true ; if (FirstRun) { if (! OrderSelect ( 0 , SELECT_BY_POS)) FirstRun = OrderSend ( _Symbol , OP_BUY, 100 , Ask, 0 , 0 , 0 ); else if (OrderSwap()) { const TICKET_TYPE Ticket = OrderTicket(); // FirstRun = !(OrderCloseBy(OrderSend(_Symbol, OP_SELL, 0.01, OrderClosePrice(),0, 0, 0), Ticket) && FirstRun = !(OrderCloseBy(Ticket, OrderSend ( _Symbol , OP_SELL, 0.01 , OrderClosePrice(), 0 , 0 , 0 )) && OrderSelect ( 0 , SELECT_BY_POS) && OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0 )); } } } 결과. 따라서 롤오버된 적이 없는 최소 위치에서 거대한 스왑이 있을 수 있습니다. 롤오버에서 살아남은 큰 포지션을 위한 제로 스왑. fxsaber 2021.09.16 17:10 #2078 롤오버 수 계산(가장 빠른 옵션 아님). #define DAY ( 24 * 3600 ) #define WEEK (DAY * 7 ) // Возврящает количество "четвергов" между двумя датами. int GetAmountWeekDay( const datetime Begin, const datetime End, const int DayWeek = - 1 ) { const datetime OffsetTime = (DayWeek - WEDNESDAY ) * DAY; return ((DayWeek != - 1 ) ? ( int )((End - OffsetTime) / WEEK - (Begin - OffsetTime) / WEEK) : 0 ); } // Возврящает количество рабочих дней между двумя датами. int GetAmountWorkingDays( const datetime Begin, const datetime End ) { const int Res = ( int )(End / DAY - Begin / DAY); return (Res ? Res - GetAmountWeekDay(Begin, End, SATURDAY ) - GetAmountWeekDay(Begin, End, SUNDAY ) : 0 ); } // Возвращает количество ролловеров (включая тройные) между двумя датами. int GetRolloverAmounts( datetime TimeOpen, datetime TimeClose, datetime RolloverTime = 0 , const int Rollover3Days = WEDNESDAY ) { RolloverTime = RolloverTime % DAY; TimeOpen -= RolloverTime; TimeClose -= RolloverTime; const int Res = GetAmountWorkingDays(TimeOpen, TimeClose); return (Res ? Res + (GetAmountWeekDay(TimeOpen, TimeClose, Rollover3Days) << 1 ) : 0 ); } #undef WEEK #undef DAY 사용 예. // Сравниваем реальные и вычисленные значения свопов. #include <MT4Orders.mqh> input datetime inRolloverTime = 0 ; // Время ролловера input int inCount = 100 ; // Маскимальное количество распечаток // Вычисляет своп закрытой позиции. double CalcOrderSwap( const datetime RolloverTime = 0 ) { return (((OrderType() <= OP_SELL) && ( SymbolInfoInteger (OrderSymbol(), SYMBOL_SWAP_MODE ) == SYMBOL_SWAP_MODE_POINTS )) // https://www.mql5.com/ru/forum/170952/page208#comment_24667438 ? GetRolloverAmounts(OrderOpenTime(), OrderCloseTime(), RolloverTime, ( int ) SymbolInfoInteger (OrderSymbol(), SYMBOL_SWAP_ROLLOVER3DAYS )) * SymbolInfoDouble (OrderSymbol(), OrderType() ? SYMBOL_SWAP_SHORT : SYMBOL_SWAP_LONG ) * SymbolInfoDouble (OrderSymbol(), SYMBOL_TRADE_TICK_VALUE ) * OrderLots() : 0 ); } #define TOSTRING(A) " " + #A + " = " + ( string )(A) void OnStart () { for ( int i = OrdersHistoryTotal() - 1 , Count = 0 ; (i >= 0 ) && (Count < inCount); i--) if ( OrderSelect (i, SELECT_BY_POS, MODE_HISTORY) && OrderSwap()) { OrderPrint(); Print (( string )Count++ + TOSTRING(OrderSwap()) + TOSTRING(CalcOrderSwap(inRolloverTime)) + "\n" ); } } 결과. # 2122237 2021.09 . 09 23 : 09 : 15.512 sell 0.18 GBPCAD 1.75119 0.00000 1.75286 2021.09 . 10 04 : 27 : 40.506 1.75286 - 0.84 - 0.80 - 20.07 7 ;[ 0 ] 7 97 OrderSwap() = - 0.8 CalcOrderSwap(inRolloverTime) = - 0.8048844238618312 Andrey Khatimlianskii 2021.09.17 08:16 #2079 fxsaber # : CloseBy 작업은 두 개의 거래를 생성합니다. 첫 번째(CloseBy의 첫 번째 위치) 거래의 스왑에는 두 위치의 스왑 합계가 포함됩니다. 두 번째 거래의 스왑은 0입니다. CloseBy를 통해 위치를 부분적으로 청산하면 열린 위치의 나머지 부분에서 스왑이 박탈되고 0으로 재설정됩니다. ... 따라서 롤오버된 적이 없는 최소 위치에서 거대한 스왑이 있을 수 있습니다. 롤오버에서 살아남은 큰 포지션을 위한 제로 스왑. 기이! 정말, 반올림 때문에 (센트를 잃지 않거나 추가하지 않기 위해)? 아니면 거의 사용되지 않는 작업이므로 문제가 되지 않습니까? fxsaber 2021.09.17 08:26 #2080 Andrey Khatimlianskii # : 기이! 정말, 반올림 때문에(센트가 손실되거나 추가되지 않도록)? 이것은 확실히 사실이 아닙니다. 왜냐하면. 부분 마감 시(전체 OrderLots가 아닌 OrderClose) 그에 따라 스왑이 트리거됩니다. 아니면 거의 사용되지 않는 작업이므로 문제가 되지 않습니까? 각본이 잘 짜여진게 아닌가 싶습니다. 1...201202203204205206207208209210211212213214215...247 새 코멘트 트레이딩 기회를 놓치고 있어요: 무료 트레이딩 앱 복사용 8,000 이상의 시그널 금융 시장 개척을 위한 경제 뉴스 등록 로그인 공백없는 라틴 문자 비밀번호가 이 이메일로 전송될 것입니다 오류 발생됨 Google으로 로그인 웹사이트 정책 및 이용약관에 동의합니다. 계정이 없으시면, 가입하십시오 MQL5.com 웹사이트에 로그인을 하기 위해 쿠키를 허용하십시오. 브라우저에서 필요한 설정을 활성화하시지 않으면, 로그인할 수 없습니다. 사용자명/비밀번호를 잊으셨습니까? Google으로 로그인
제가 거래 상황을 잘못 이해한 것 같습니다.
내가 상상한 대로: 보류 중인 지정가 주문은 여러 거래로 채워졌습니다. 이 모든 시간 동안 그것은 실시간 주문에 매달렸고 ORDER_TIME_SETUP 필드는 상수가 아니었습니다. 마지막 거래 후 그는 역사에 기록되었습니다. 이 시점에서 ORDER_TIME_SETUP 은 상수가 되었습니다.
아니면 틀렸나요?
ORDER_TIME_SETUP은 항상 상수입니다. 내가 역사에 들어갔을 때 ORDER_TIME_DONE이 나타났습니다.
ORDER_TIME_SETUP은 항상 상수입니다. 내가 역사에 들어갔을 때 ORDER_TIME_DONE이 나타났습니다.
이제 지연 제한을 설정하고 있습니다. 그런 다음 내 손으로 변경하고 스크립트와 ORDER_TIME_SETUP 을 변경합니다.
내가 무엇을 잘못하고 있지?
과거에 유사한 사례에 대해 이미 게시했습니다.
https://www.mql5.com/ru/forum/170952/page170#comment_15824249
https://www.mql5.com/ru/forum/170952/page172#comment_15829154
이제 지연 제한을 설정하고 있습니다. 그런 다음 내 손으로 변경하고 스크립트와 ORDER_TIME_SETUP 을 변경합니다.
내가 무엇을 잘못하고 있지?
이것은 노출 시간을 변경하지 않습니다.
과거에 유사한 사례에 대해 이미 게시했습니다.
https://www.mql5.com/ru/forum/170952/page170#comment_15824249
https://www.mql5.com/ru/forum/170952/page172#comment_15829154
과연, 포스트. 하지만 전혀 기억나지 않았다. 버그라고 생각합니다.
부분실행을 반복하면 어떻게 될지 모르겠습니다.
이제 나는 이 브로커(나는 그들의 소프트웨어에 오류가 있는 쪽으로 기울고 있다)가 더 이상 변경되지 않을 것임을 압니다.
때때로 틱이 브로드캐스트되는 빈도를 아는 것이 유용합니다.
CloseBy 작업은 두 개의 거래를 생성합니다. 첫 번째(CloseBy의 첫 번째 위치) 거래의 스왑에는 두 위치의 스왑 합계가 포함됩니다. 두 번째 거래의 스왑은 0입니다.
CloseBy를 통해 위치를 부분적으로 청산하면 열린 위치의 나머지 부분에서 스왑이 박탈되고 0으로 재설정됩니다.
결과.
따라서 롤오버된 적이 없는 최소 위치에서 거대한 스왑이 있을 수 있습니다. 롤오버에서 살아남은 큰 포지션을 위한 제로 스왑.
롤오버 수 계산(가장 빠른 옵션 아님).
사용 예.
결과.
CloseBy 작업은 두 개의 거래를 생성합니다. 첫 번째(CloseBy의 첫 번째 위치) 거래의 스왑에는 두 위치의 스왑 합계가 포함됩니다. 두 번째 거래의 스왑은 0입니다.
CloseBy를 통해 위치를 부분적으로 청산하면 열린 위치의 나머지 부분에서 스왑이 박탈되고 0으로 재설정됩니다.
...
따라서 롤오버된 적이 없는 최소 위치에서 거대한 스왑이 있을 수 있습니다. 롤오버에서 살아남은 큰 포지션을 위한 제로 스왑.
기이!
정말, 반올림 때문에 (센트를 잃지 않거나 추가하지 않기 위해)?
아니면 거의 사용되지 않는 작업이므로 문제가 되지 않습니까?
기이!
정말, 반올림 때문에(센트가 손실되거나 추가되지 않도록)?
이것은 확실히 사실이 아닙니다. 왜냐하면. 부분 마감 시(전체 OrderLots가 아닌 OrderClose) 그에 따라 스왑이 트리거됩니다.
아니면 거의 사용되지 않는 작업이므로 문제가 되지 않습니까?
각본이 잘 짜여진게 아닌가 싶습니다.