MT5와 속도 - 페이지 57 1...505152535455565758596061626364...94 새 코멘트 fxsaber 2020.10.14 07:53 #561 Renat Fatkhullin : 대규모 병렬 액세스의 경우 수십 배 더 빠릅니다. 다른 경우에는 프로세서, 메모리 및 OS만 업그레이드하면 됩니다. LS에서는 동일한 시스템의 비교 로그입니다. Renat Fatkhullin 2020.10.14 07:55 #562 fxsaber : 이것은 CopyTicks에 대한 일회성 호출입니다. OnInit에서 이러한 진드기에 대한 가상 백테스트를 실제 생활에서 수행한 다음 실시간으로 계속 진행하여 신선한 진드기만 공급하기 위해 수행됩니다. 타협으로 CopyTicks가 OnInit에서 호출된 후 즉시 터미널에서 메모리를 해제하는 것이 좋습니다. 그러면 강제 냉각 기능 CopyTicks에 들어갈 수 없습니다. 이제 절전 냉각 옵션은 매우 중요합니다. 그러나 위에서 이 목발이 어떻게 메모리를 절약하는지 보여주었습니다. 이제 20명의 고문이 느린 VPS에서도 빠르게 쟁기질하는 것으로 나타났습니다. 그러나 그들의 시작은 심각한 문제입니다. 얼마 전 당신 자신은 스트레스 테스트를 실행했으며 실제로 각 틱 에 대한 즉각적인 틱 발행을 요구했습니다. 즉, 귀하와 100% 다른 개발자 모두 전체 캐시를 기다리는 쿼리 전략을 사용해 왔으며 앞으로도 계속 사용할 것입니다. 매번 점점 더 많은 비용과 정면 전문가들이 글을 씁니다. 따라서 어떤 경우에도 캐시를 취소하지 않지만 16-32GB의 메모리를 설치하고 문제와 지연을 잊어 버리는 것이 좋습니다. VPS의 동작 및 절약(512MB-1GB 이내로 유지)은 우리를 전혀 괴롭히지 않습니다. MetaTrader 4 및 MQL4의 [ARCHIVE] 포럼을 어지럽히 지 추적 작업(함수 그래프 작성) fxsaber 2020.10.14 07:57 #563 Renat Fatkhullin : 얼마 전 당신 자신은 스트레스 테스트를 실행했으며 실제로 각 틱 에 대한 즉각적인 틱 발행을 요구했습니다. 즉, 귀하와 100% 다른 개발자 모두 전체 캐시를 기다리는 쿼리 전략을 사용해 왔으며 앞으로도 계속 사용할 것입니다. 매번 점점 더 많은 비용과 정면 전문가들이 글을 씁니다. 따라서 어떤 경우에도 캐시를 취소하지 않지만 16-32GB의 메모리를 설치하고 문제와 지연을 잊어 버리는 것이 좋습니다. VPS(512MB-1GB 이내로 유지)의 동작 및 절약은 우리를 전혀 괴롭히지 않습니다. 위의 코드로 내 게시물을 업데이트했습니다. 우리는 다른 것이 아니라 OnInit에 대해 이야기하고 있습니다. Hot CopyTicks는 매우 필요하지만 OnInit에서는 필요하지 않습니다. Andrey Khatimlianskii 2020.10.14 22:47 #564 fxsaber : 타협으로 CopyTicks가 OnInit에서 호출된 후 즉시 터미널에서 메모리를 해제하는 것이 좋습니다. 어떠한 경우에도! 그러나 반대로 OnInit에서 캐시를 올려 나중에 지체 없이 작업할 수 있게 하면 어떻게 될까요? 터미널 캐시를 언로드하는 기능을 도입하는 것이 좋습니다. 틱뿐만 아니라 시계열 및 지표에도 필요합니다(5K 계측기 및 5개 TF에 대한 스크리너 작성 시도). @르낫? fxsaber 2020.10.14 23:38 #565 Andrey Khatimlianskii : 어떠한 경우에도! 그러나 반대로 OnInit에서 캐시를 올려 나중에 지체 없이 작업할 수 있게 하면 어떻게 될까요? 틱 캐시는 10초만 지속됩니다. fxsaber 2020.10.17 00:08 #566 스크립트 형태의 틱 이력 스크리너(터미널에서 작동하는 유일한 프로그램)는 5개월 동안 견적을 받으면 최대 6GB를 먹습니다. 기계와 인터넷이 빠를수록 메모리 부하가 커집니다. 저것들. 10초 안에 터미널의 내부 캐시가 여러 심볼에 대해 누적됩니다. fxsaber 2020.10.19 21:54 #567 빠른 차, 9명의 고문. 2020.10 . 19 22 : 32 : 06.965 Bench_Stack = 3 , 100 <= Time[NewTicks.mqh 33 in NEWTICKS::GetMarketWatchTick: :: SymbolInfoTick ( _Symbol ,Tick)] = 1229 mcs. 2020.10 . 19 22 : 33 : 23.727 Bench_Stack = 3 , 100 <= Time[NewTicks.mqh 33 in NEWTICKS::GetMarketWatchTick: :: SymbolInfoTick ( _Symbol ,Tick)] = 1250 mcs. 2020.10 . 19 22 : 34 : 29.802 Bench_Stack = 3 , 100 <= Time[NewTicks.mqh 33 in NEWTICKS::GetMarketWatchTick: :: SymbolInfoTick ( _Symbol ,Tick)] = 1281 mcs. 2020.10 . 19 22 : 35 : 58.747 Bench_Stack = 2 , 100 <= Time[NewTicks.mqh 33 in NEWTICKS::GetMarketWatchTick: :: SymbolInfoTick ( _Symbol ,Tick)] = 1164 mcs. 2020.10 . 19 22 : 37 : 20.196 Bench_Stack = 3 , 100 <= Time[NewTicks.mqh 33 in NEWTICKS::GetMarketWatchTick: :: SymbolInfoTick ( _Symbol ,Tick)] = 1045 mcs. 2020.10 . 19 22 : 38 : 24.920 Bench_Stack = 3 , 100 <= Time[NewTicks.mqh 33 in NEWTICKS::GetMarketWatchTick: :: SymbolInfoTick ( _Symbol ,Tick)] = 1907 mcs. 2020.10 . 19 22 : 39 : 48.359 Bench_Stack = 3 , 100 <= Time[NewTicks.mqh 33 in NEWTICKS::GetMarketWatchTick: :: SymbolInfoTick ( _Symbol ,Tick)] = 1387 mcs. 2020.10 . 19 22 : 40 : 03.623 Bench_Stack = 3 , 100 <= Time[NewTicks.mqh 33 in NEWTICKS::GetMarketWatchTick: :: SymbolInfoTick ( _Symbol ,Tick)] = 1302 mcs. 2020.10 . 19 22 : 40 : 44.569 Bench_Stack = 3 , 100 <= Time[NewTicks.mqh 33 in NEWTICKS::GetMarketWatchTick: :: SymbolInfoTick ( _Symbol ,Tick)] = 1271 mcs. 2020.10 . 19 22 : 41 : 09.393 Bench_Stack = 3 , 100 <= Time[NewTicks.mqh 33 in NEWTICKS::GetMarketWatchTick: :: SymbolInfoTick ( _Symbol ,Tick)] = 1482 mcs. 2020.10 . 19 22 : 41 : 19.831 Bench_Stack = 3 , 100 <= Time[NewTicks.mqh 33 in NEWTICKS::GetMarketWatchTick: :: SymbolInfoTick ( _Symbol ,Tick)] = 1024 mcs. 2020.10 . 19 22 : 41 : 19.975 Alert : Bench_Stack = 3 , 100 <= Time[NewTicks.mqh 33 in NEWTICKS::GetMarketWatchTick: :: SymbolInfoTick ( _Symbol ,Tick)] = 8026 mcs. 2020.10 . 19 22 : 41 : 50.137 Bench_Stack = 2 , 100 <= Time[NewTicks.mqh 33 in NEWTICKS::GetMarketWatchTick: :: SymbolInfoTick ( _Symbol ,Tick)] = 1040 mcs. 2020.10 . 19 22 : 42 : 05.876 Bench_Stack = 2 , 100 <= Time[NewTicks.mqh 33 in NEWTICKS::GetMarketWatchTick: :: SymbolInfoTick ( _Symbol ,Tick)] = 1346 mcs. 2020.10 . 19 22 : 43 : 21.478 Bench_Stack = 3 , 100 <= Time[NewTicks.mqh 33 in NEWTICKS::GetMarketWatchTick: :: SymbolInfoTick ( _Symbol ,Tick)] = 1523 mcs. 2020.10 . 19 22 : 43 : 21.557 Bench_Stack = 3 , 100 <= Time[NewTicks.mqh 33 in NEWTICKS::GetMarketWatchTick: :: SymbolInfoTick ( _Symbol ,Tick)] = 1245 mcs. 2020.10 . 19 22 : 43 : 21.843 Alert : Bench_Stack = 3 , 100 <= Time[NewTicks.mqh 33 in NEWTICKS::GetMarketWatchTick: :: SymbolInfoTick ( _Symbol ,Tick)] = 4675 mcs. 2020.10 . 19 22 : 43 : 21.854 Alert : Bench_Stack = 3 , 100 <= Time[NewTicks.mqh 33 in NEWTICKS::GetMarketWatchTick: :: SymbolInfoTick ( _Symbol ,Tick)] = 7567 mcs. 2020.10 . 19 22 : 44 : 01.181 Bench_Stack = 3 , 100 <= Time[NewTicks.mqh 33 in NEWTICKS::GetMarketWatchTick: :: SymbolInfoTick ( _Symbol ,Tick)] = 1052 mcs. 2020.10 . 19 22 : 44 : 33.124 Bench_Stack = 3 , 100 <= Time[NewTicks.mqh 33 in NEWTICKS::GetMarketWatchTick: :: SymbolInfoTick ( _Symbol ,Tick)] = 2714 mcs. 2020.10 . 19 22 : 44 : 54.967 Alert : Bench_Stack = 3 , 100 <= Time[NewTicks.mqh 33 in NEWTICKS::GetMarketWatchTick: :: SymbolInfoTick ( _Symbol ,Tick)] = 13626 mcs. 2020.10 . 19 22 : 45 : 07.561 Bench_Stack = 3 , 100 <= Time[NewTicks.mqh 33 in NEWTICKS::GetMarketWatchTick: :: SymbolInfoTick ( _Symbol ,Tick)] = 2800 mcs. 나는 그러한 지연을 극복하는 방법을 모릅니다. OnTick이 실행되는 동안 새로운 틱이 나타났는지 알 수 있는 다른 방법은 생각하지 않았습니다. fxsaber 2020.10.19 22:42 #568 fxsaber : OnTick이 실행되는 동안 새로운 틱이 나타났는지 알 수 있는 다른 방법은 생각하지 않았습니다. 세 가지 옵션. // Идентификация нового тика bool IsNewTick_CopyRates() { static MqlRates PrevRates = { 0 }; MqlRates Rates[ 1 ]; const bool Res = (:: CopyRates ( _Symbol , PERIOD_CURRENT , 0 , 1 , Rates) == 1 ) && // (_R(PrevRates) != Rates[0]); // TypeToBytes.mqh ((Rates[ 0 ].time != PrevRates.time) || (Rates[ 0 ].tick_volume > PrevRates.tick_volume) || (Rates[ 0 ].close != PrevRates.close)); // Лишнее условие, но на всякий случай. if (Res) PrevRates = Rates[ 0 ]; return (Res); } // Идентификация нового тика bool IsNewTick_SymbolInfoTick() { static MqlTick PrevTick = { 0 }; MqlTick Tick; const bool Res = :: SymbolInfoTick ( _Symbol , Tick) && // (_R(PrevTick) != Tick); // TypeToBytes.mqh ((PrevTick.time_msc != Tick.time_msc) || (PrevTick.bid != Tick.bid) || (PrevTick.ask != Tick.ask)); if (Res) PrevTick = Tick; return (Res); } // Идентификация нового тика bool IsNewTick_CopyTicks() { static MqlTick PrevTick = { 0 }; MqlTick Tick[ 1 ]; const bool Res = (:: CopyTicks ( _Symbol , Tick, COPY_TICKS_ALL , 0 , 1 ) == 1 ) && // (_R(PrevTick) != Tick[0]); // TypeToBytes.mqh ((PrevTick.time_msc != Tick[ 0 ].time_msc) || (PrevTick.bid != Tick[ 0 ].bid) || (PrevTick.ask != Tick[ 0 ].ask)); if (Res) PrevTick = Tick[ 0 ]; return (Res); } #define PRINT(A) \ if (!A) \ Print ( #A + " = false" ); void OnTick () { PRINT(IsNewTick_CopyTicks()); // true PRINT(IsNewTick_SymbolInfoTick()); // true PRINT(IsNewTick_CopyRates()) // false } 막대를 통해 새 눈금을 정의하지 않는 것이 좋습니다. fxsaber 2020.10.19 23:37 #569 CopyTicks가 SymbolInfoTick보다 얼마나 오래 지연될 수 있는지 명확해졌습니다. // Замер длительности синхронизации CopyTicks и SymbolInfoTick. #include <TypeToBytes.mqh> // https://www.mql5.com/ru/code/16280 bool IsSynch() { MqlTick Tick; MqlTick Ticks[ 1 ]; return ( SymbolInfoTick ( _Symbol , Tick) && ( CopyTicks ( _Symbol , Ticks, COPY_TICKS_ALL , 0 , 1 ) == 1 ) && (_R(Tick) == Ticks[ 0 ])); } ulong WaitSynch( int &Count ) { while (! IsStopped () && IsSynch()) Sleep ( 0 ); const ulong StartTime = GetMicrosecondCount (); Count = 0 ; while (! IsStopped () && !IsSynch()) Count++; return ( GetMicrosecondCount () - StartTime); } void OnTick () { int Count; const uint StartTime = GetTickCount (); while ( GetTickCount () - StartTime < 10000 ) Print ( "Cинхронизация CopyTicks и SymbolInfoTick длилась " + ( string )(WaitSynch(Count) / 1000 ) + " ms., число проверок = " + ( string )Count); } 결과는 ( inAmount = 15 )입니다. 2020.10 . 20 00 : 32 : 46.316 Test9 (GBPAUD,H1) Cинхронизация CopyTicks и SymbolInfoTick длилась 163 ms., число попыток = 391432 2020.10 . 20 00 : 32 : 46.894 Test9 (GBPAUD,H1) Cинхронизация CopyTicks и SymbolInfoTick длилась 221 ms., число попыток = 526533 2020.10 . 20 00 : 32 : 50.839 Test9 (GBPAUD,H1) Cинхронизация CopyTicks и SymbolInfoTick длилась 69 ms., число попыток = 112339 2020.10 . 20 00 : 32 : 50.839 Test9 (EURAUD,H1) Cинхронизация CopyTicks и SymbolInfoTick длилась 385 ms., число попыток = 837204 2020.10 . 20 00 : 32 : 51.958 Test9 (EURAUD,H1) Cинхронизация CopyTicks и SymbolInfoTick длилась 74 ms., число попыток = 166407 2020.10 . 20 00 : 32 : 52.044 Test9 (EURAUD,H1) Cинхронизация CopyTicks и SymbolInfoTick длилась 80 ms., число попыток = 180256 2020.10 . 20 00 : 32 : 52.797 Test9 (EURAUD,H1) Cинхронизация CopyTicks и SymbolInfoTick длилась 737 ms., число попыток = 1469883 2020.10 . 20 00 : 33 : 04.229 Test9 (EURAUD,H1) Cинхронизация CopyTicks и SymbolInfoTick длилась 8550 ms., число попыток = 14608891 2020.10 . 20 00 : 33 : 04.319 Test9 (GBPAUD,H1) Cинхронизация CopyTicks и SymbolInfoTick длилась 159 ms., число попыток = 150630 2020.10 . 20 00 : 33 : 04.324 Test9 (AUDCHF,H1) Cинхронизация CopyTicks и SymbolInfoTick длилась 85 ms., число попыток = 78591 2020.10 . 20 00 : 33 : 07.340 Test9 (EURAUD,H1) Cинхронизация CopyTicks и SymbolInfoTick длилась 2947 ms., число попыток = 4899320 2020.10 . 20 00 : 33 : 08.076 Test9 (EURAUD,H1) Cинхронизация CopyTicks и SymbolInfoTick длилась 727 ms., число попыток = 1209371 2020.10 . 20 00 : 33 : 08.138 Test9 (EURAUD,H1) Cинхронизация CopyTicks и SymbolInfoTick длилась 55 ms., число попыток = 73155 2020.10 . 20 00 : 33 : 14.233 Test9 (EURCAD,H1) Cинхронизация CopyTicks и SymbolInfoTick длилась 107 ms., число попыток = 149697 2020.10 . 20 00 : 33 : 15.985 Test9 (EURCAD,H1) Cинхронизация CopyTicks и SymbolInfoTick длилась 190 ms., число попыток = 230501 2020.10 . 20 00 : 33 : 16.114 Test9 (GBPJPY,H1) Cинхронизация CopyTicks и SymbolInfoTick длилась 208 ms., число попыток = 275639 2020.10 . 20 00 : 33 : 41.328 Test9 (GBPJPY,H1) Cинхронизация CopyTicks и SymbolInfoTick длилась 9457 ms., число попыток = 14426849 2020.10 . 20 00 : 33 : 46.000 Test9 (GBPCHF,H1) Cинхронизация CopyTicks и SymbolInfoTick длилась 53622 ms ., число попыток = 109127013 2020.10 . 20 00 : 33 : 47.936 Test9 (GBPJPY,H1) Cинхронизация CopyTicks и SymbolInfoTick длилась 1302 ms., число попыток = 3104323 2020.10 . 20 00 : 33 : 55.715 Test9 (GBPAUD,H1) Cинхронизация CopyTicks и SymbolInfoTick длилась 59 ms., число попыток = 87263 2020.10 . 20 00 : 33 : 55.776 Test9 (GBPJPY,H1) Cинхронизация CopyTicks и SymbolInfoTick длилась 88 ms., число попыток = 125641 2020.10 . 20 00 : 33 : 55.869 Test9 (GBPJPY,H1) Cинхронизация CopyTicks и SymbolInfoTick длилась 86 ms., число попыток = 140282 2020.10 . 20 00 : 33 : 55.974 Test9 (GBPJPY,H1) Cинхронизация CopyTicks и SymbolInfoTick длилась 95 ms., число попыток = 91802 2020.10 . 20 00 : 33 : 56.004 Test9 (GBPAUD,H1) Cинхронизация CopyTicks и SymbolInfoTick длилась 125 ms., число попыток = 127590 2020.10 . 20 00 : 33 : 56.202 Test9 (GBPJPY,H1) Cинхронизация CopyTicks и SymbolInfoTick длилась 214 ms., число попыток = 311277 2020.10 . 20 00 : 34 : 40.522 Test9 (GBPAUD,H1) Cинхронизация CopyTicks и SymbolInfoTick длилась 31 ms., число попыток = 48189 2020.10 . 20 00 : 34 : 40.672 Test9 (GBPAUD,H1) Cинхронизация CopyTicks и SymbolInfoTick длилась 69 ms., число попыток = 99619 2020.10 . 20 00 : 34 : 41.094 Test9 (GBPAUD,H1) Cинхронизация CopyTicks и SymbolInfoTick длилась 412 ms., число попыток = 613382 2020.10 . 20 00 : 34 : 41.864 Test9 (GBPAUD,H1) Cинхронизация CopyTicks и SymbolInfoTick длилась 768 ms., число попыток = 1136798 2020.10 . 20 00 : 34 : 46.035 Test9 (GBPAUD,H1) Cинхронизация CopyTicks и SymbolInfoTick длилась 2012 ms., число попыток = 2955715 2020.10 . 20 00 : 34 : 46.124 Test9 (GBPAUD,H1) Cинхронизация CopyTicks и SymbolInfoTick длилась 79 ms., число попыток = 109796 2020.10 . 20 00 : 34 : 46.239 Test9 (GBPAUD,H1) Cинхронизация CopyTicks и SymbolInfoTick длилась 98 ms., число попыток = 152433 2020.10 . 20 00 : 34 : 47.261 Test9 (GBPAUD,H1) Cинхронизация CopyTicks и SymbolInfoTick длилась 1009 ms., число попыток = 1300923 2020.10 . 20 00 : 34 : 47.337 Test9 (GBPAUD,H1) Cинхронизация CopyTicks и SymbolInfoTick длилась 73 ms., число попыток = 66414 2020.10 . 20 00 : 34 : 47.850 Test9 (AUDCHF,H1) Cинхронизация CopyTicks и SymbolInfoTick длилась 885 ms., число попыток = 832072 2020.10 . 20 00 : 34 : 48.383 Test9 (GBPAUD,H1) Cинхронизация CopyTicks и SymbolInfoTick длилась 1040 ms., число попыток = 1239140 2020.10 . 20 00 : 34 : 49.093 Test9 (EURCAD,H1) Cинхронизация CopyTicks и SymbolInfoTick длилась 46 ms., число попыток = 43232 2020.10 . 20 00 : 34 : 49.839 Test9 (GBPAUD,H1) Cинхронизация CopyTicks и SymbolInfoTick длилась 1445 ms., число попыток = 2065046 2020.10 . 20 00 : 34 : 51.474 Test9 (GBPCHF,H1) Cинхронизация CopyTicks и SymbolInfoTick длилась 55801 ms. , число попыток = 119517920 2020.10 . 20 00 : 34 : 51.755 Test9 (GBPAUD,H1) Cинхронизация CopyTicks и SymbolInfoTick длилась 1498 ms., число попыток = 1625714 2020.10 . 20 00 : 34 : 52.269 Test9 (GBPJPY,H1) Cинхронизация CopyTicks и SymbolInfoTick длилась 403 ms., число попыток = 693015 2020.10 . 20 00 : 34 : 59.175 Test9 (AUDCAD,H1) Cинхронизация CopyTicks и SymbolInfoTick длилась 9413 ms., число попыток = 16211601 2020.10 . 20 00 : 35 : 00.398 Test9 (EURAUD,H1) Cинхронизация CopyTicks и SymbolInfoTick длилась 6302 ms., число попыток = 11626079 2020.10 . 20 00 : 35 : 05.587 Test9 (AUDCHF,H1) Cинхронизация CopyTicks и SymbolInfoTick длилась 3645 ms., число попыток = 8637511 2020.10 . 20 00 : 35 : 07.247 Test9 (EURAUD,H1) Cинхронизация CopyTicks и SymbolInfoTick длилась 133 ms., число попыток = 205326 2020.10 . 20 00 : 35 : 09.033 Test9 (AUDCHF,H1) Cинхронизация CopyTicks и SymbolInfoTick длилась 3427 ms., число попыток = 8060967 동기화되지 않는 기간은 최대 1분입니다. 어딘가에 잼. fxsaber 2020.10.20 00:06 #570 Parallel Access에서 SymbolInfoTick을 제동하는 이유인 것 같습니다. // Демонстрация тормозов SymbolInfoTick #include <fxsaber\Benchmark\Benchmark.mqh> // https://www.mql5.com/ru/code/31279 void OnTick () { const uint StartTime = GetTickCount (); while (! IsStopped () && ( GetTickCount () - StartTime < 10000 )) { _B( SymbolInfoInteger ( _Symbol , SYMBOL_TIME_MSC), 100000 ); // Sleep(0); // Специально убрал. } } 결과는 ( inAmount = 15 )입니다. 2020.10 . 20 01 : 01 : 30.517 Test9 (EURAUD,H1) Alert : Bench_Stack = 0 , 100000 <= Time[Test9.mq5 97 in OnTick : SymbolInfoInteger ( _Symbol ,SYMBOL_TIME_MSC)] = 105941 mcs. 2020.10 . 20 01 : 01 : 37.596 Test9 (USDCAD,H1) Alert : Bench_Stack = 0 , 100000 <= Time[Test9.mq5 97 in OnTick : SymbolInfoInteger ( _Symbol ,SYMBOL_TIME_MSC)] = 103045 mcs. 2020.10 . 20 01 : 01 : 38.968 Test9 (EURCHF,H1) Alert : Bench_Stack = 0 , 100000 <= Time[Test9.mq5 97 in OnTick : SymbolInfoInteger ( _Symbol ,SYMBOL_TIME_MSC)] = 103305 mcs. 2020.10 . 20 01 : 01 : 41.307 Test9 (EURUSD,H1) Alert : Bench_Stack = 0 , 100000 <= Time[Test9.mq5 97 in OnTick : SymbolInfoInteger ( _Symbol ,SYMBOL_TIME_MSC)] = 106121 mcs. 2020.10 . 20 01 : 01 : 42.573 Test9 (USDCAD,H1) Alert : Bench_Stack = 0 , 100000 <= Time[Test9.mq5 97 in OnTick : SymbolInfoInteger ( _Symbol ,SYMBOL_TIME_MSC)] = 128241 mcs. 2020.10 . 20 01 : 01 : 45.175 Test9 (GBPCHF,H1) Alert : Bench_Stack = 0 , 100000 <= Time[Test9.mq5 97 in OnTick : SymbolInfoInteger ( _Symbol ,SYMBOL_TIME_MSC)] = 120367 mcs. 2020.10 . 20 01 : 01 : 46.394 Test9 (EURCHF,H1) Alert : Bench_Stack = 0 , 100000 <= Time[Test9.mq5 97 in OnTick : SymbolInfoInteger ( _Symbol ,SYMBOL_TIME_MSC)] = 104458 mcs. 2020.10 . 20 01 : 01 : 57.832 Test9 (GBPCHF,H1) Alert : Bench_Stack = 0 , 100000 <= Time[Test9.mq5 97 in OnTick : SymbolInfoInteger ( _Symbol ,SYMBOL_TIME_MSC)] = 125348 mcs. > SymbolInfoTick을 실행하는 데 100ms. 코드가 석궁임이 분명합니다. 하지만 일반 Expert Advisors에서 브레이크가 미끄러지는 이유를 보여줍니다. 1...505152535455565758596061626364...94 새 코멘트 트레이딩 기회를 놓치고 있어요: 무료 트레이딩 앱 복사용 8,000 이상의 시그널 금융 시장 개척을 위한 경제 뉴스 등록 로그인 공백없는 라틴 문자 비밀번호가 이 이메일로 전송될 것입니다 오류 발생됨 Google으로 로그인 웹사이트 정책 및 이용약관에 동의합니다. 계정이 없으시면, 가입하십시오 MQL5.com 웹사이트에 로그인을 하기 위해 쿠키를 허용하십시오. 브라우저에서 필요한 설정을 활성화하시지 않으면, 로그인할 수 없습니다. 사용자명/비밀번호를 잊으셨습니까? Google으로 로그인
대규모 병렬 액세스의 경우 수십 배 더 빠릅니다.
다른 경우에는 프로세서, 메모리 및 OS만 업그레이드하면 됩니다.
LS에서는 동일한 시스템의 비교 로그입니다.
이것은 CopyTicks에 대한 일회성 호출입니다. OnInit에서 이러한 진드기에 대한 가상 백테스트를 실제 생활에서 수행한 다음 실시간으로 계속 진행하여 신선한 진드기만 공급하기 위해 수행됩니다.
타협으로 CopyTicks가 OnInit에서 호출된 후 즉시 터미널에서 메모리를 해제하는 것이 좋습니다. 그러면 강제 냉각 기능 CopyTicks에 들어갈 수 없습니다.
이제 절전 냉각 옵션은 매우 중요합니다. 그러나 위에서 이 목발이 어떻게 메모리를 절약하는지 보여주었습니다.
이제 20명의 고문이 느린 VPS에서도 빠르게 쟁기질하는 것으로 나타났습니다. 그러나 그들의 시작은 심각한 문제입니다.
얼마 전 당신 자신은 스트레스 테스트를 실행했으며 실제로 각 틱 에 대한 즉각적인 틱 발행을 요구했습니다.
즉, 귀하와 100% 다른 개발자 모두 전체 캐시를 기다리는 쿼리 전략을 사용해 왔으며 앞으로도 계속 사용할 것입니다. 매번 점점 더 많은 비용과 정면 전문가들이 글을 씁니다.
따라서 어떤 경우에도 캐시를 취소하지 않지만 16-32GB의 메모리를 설치하고 문제와 지연을 잊어 버리는 것이 좋습니다.
VPS의 동작 및 절약(512MB-1GB 이내로 유지)은 우리를 전혀 괴롭히지 않습니다.
얼마 전 당신 자신은 스트레스 테스트를 실행했으며 실제로 각 틱 에 대한 즉각적인 틱 발행을 요구했습니다.
즉, 귀하와 100% 다른 개발자 모두 전체 캐시를 기다리는 쿼리 전략을 사용해 왔으며 앞으로도 계속 사용할 것입니다. 매번 점점 더 많은 비용과 정면 전문가들이 글을 씁니다.
따라서 어떤 경우에도 캐시를 취소하지 않지만 16-32GB의 메모리를 설치하고 문제와 지연을 잊어 버리는 것이 좋습니다.
VPS(512MB-1GB 이내로 유지)의 동작 및 절약은 우리를 전혀 괴롭히지 않습니다.
위의 코드로 내 게시물을 업데이트했습니다. 우리는 다른 것이 아니라 OnInit에 대해 이야기하고 있습니다. Hot CopyTicks는 매우 필요하지만 OnInit에서는 필요하지 않습니다.
타협으로 CopyTicks가 OnInit에서 호출된 후 즉시 터미널에서 메모리를 해제하는 것이 좋습니다.
어떠한 경우에도!
그러나 반대로 OnInit에서 캐시를 올려 나중에 지체 없이 작업할 수 있게 하면 어떻게 될까요?
터미널 캐시를 언로드하는 기능을 도입하는 것이 좋습니다.
틱뿐만 아니라 시계열 및 지표에도 필요합니다(5K 계측기 및 5개 TF에 대한 스크리너 작성 시도).
@르낫?
어떠한 경우에도!
그러나 반대로 OnInit에서 캐시를 올려 나중에 지체 없이 작업할 수 있게 하면 어떻게 될까요?
틱 캐시는 10초만 지속됩니다.
스크립트 형태의 틱 이력 스크리너(터미널에서 작동하는 유일한 프로그램)는 5개월 동안 견적을 받으면 최대 6GB를 먹습니다.
기계와 인터넷이 빠를수록 메모리 부하가 커집니다. 저것들. 10초 안에 터미널의 내부 캐시가 여러 심볼에 대해 누적됩니다.
OnTick이 실행되는 동안 새로운 틱이 나타났는지 알 수 있는 다른 방법은 생각하지 않았습니다.
세 가지 옵션.
막대를 통해 새 눈금을 정의하지 않는 것이 좋습니다.
결과는 ( inAmount = 15 )입니다.
동기화되지 않는 기간은 최대 1분입니다. 어딘가에 잼.
Parallel Access에서 SymbolInfoTick을 제동하는 이유인 것 같습니다.
결과는 ( inAmount = 15 )입니다.
> SymbolInfoTick을 실행하는 데 100ms. 코드가 석궁임이 분명합니다. 하지만 일반 Expert Advisors에서 브레이크가 미끄러지는 이유를 보여줍니다.