FORTS 请帮助 - 页 12 1...5678910111213141516171819...31 新评论 [删除] 2015.03.28 22:51 #111 komposter: 呕吐,爱德华,呕吐=) 哦,拜托,我是用 "U "做的))))。 Anton 2015.03.30 14:49 #112 Mikalas:我理解这一点,但为什么不能用我上面描述的方式来做呢?它不会对处理信息的速度产生任何影响。如果有任何关于工具的信息--记录它首次出现的日期,并将其存储在内存中--8个字节你甚至可以不存储它,但当你做SymbolSelect()时,你把它放到内存中。当我们用SeriesInfoInteger (SERIES_TERMINAL_FIRSTDATE)函数处理它时,我们得到了。A -1 - 无数据Б.0 - 没有数据,但尚未准备好В.A--第一个信息的日期然后,一切都会变得清晰和透明。-1 - 进入服务器0 - 我们等待下一次迭代来检查和/或建立时间序列。> 0 建立时间序列从你的参考资料中,我了解到你几乎是这样做的,结果不是。显然,一个程序员开始写,另一个人完成了你的实施对FOREX来说是好的,但对FORTS来说是非常不方便的。对于FORTS来说,报价可能在很长一段时间内不会出现,时间序列是从平台上下载的。 而你必须再次重复整个数据检索过程,而且是在服务器登录的情况下!使用专家顾问来处理多个符号数据,一切都将变得方便和简单。MT5环境中的指标主要是为了快速计算其时间序列数据并在图表上显示计算结果。随着平台的发展,他们获得了许多专家可用的功能,但基本的架构限制仍然存在。而且没有理由完全消除指标和EA之间的差异。我想再次提醒你,最重要的区别是,专家顾问有自己的处理流程。这些指标是在一个服务流程中计算的,这个流程还执行许多其他功能。这就是为什么即使我们与专家顾问有共同的功能,也是以不同的方式实现的。至于查阅历史的问题,没有通用的解决方案。终端无法提前预测用户的需求,即专家顾问是想只获得一个日期还是想请求整个可用的历史。终端选择快速访问时间框架,即在用户的要求下,它试图完整地缓存当前(与服务器同步)的历史状态。是的,有一类应用,这种方法是不方便的。但如果程序员不关注 "亲自 "重写终端的需求,他将在现有功能中找到解决方案。如果根本没有解决方案,才会出现扩展功能的问题。用一个具体的代码描述一个具体的问题,不要泛泛而谈。否则,你会得到一个难以理解的功能,一个单一的功能被膨胀成 "一切都错了 "和 "一切都不方便"。 Mikhail Filimonov 2015.03.30 15:44 #113 antt:使用专家顾问来处理多个符号数据,一切都将变得方便和简单。MT5环境中的指标主要是为了对其时间序列数据进行快速计算,并将计算结果显示在图表上。随着平台的发展,他们获得了许多专家可用的功能,但基本的架构限制仍然存在。而且没有理由完全消除指标和EA之间的差异。我想再次提醒你,最重要的区别是,专家顾问有自己的处理流程。这些指标是在一个服务流程中计算的,这个流程还执行许多其他功能。这就是为什么即使是与专家顾问共享的功能也以不同的方式实现。至于获取历史的问题,没有普遍的解决办法。终端无法提前预测用户的需求,即专家顾问是想只获得一个日期,还是想请求整个可用的历史。终端做出了有利于快速访问时间框架的选择,即应用户的要求,它试图完整地缓存当前(与服务器同步)的历史状态。是的,有一类应用,这种方法是不方便的。但如果程序员不关注 "亲自 "重写终端的需求,他将在现有功能中找到解决方案。如果根本没有解决方案,才会出现扩展功能的问题。用一个具体的代码描述一个具体的问题,不要泛泛而谈。否则,你会得到一个难以理解的功能,一个单一的功能被膨胀成 "一切都错了 "和 "一切都不方便"。你好,安东!让我们 "分解 "一下你的答案。1."使用专家来处理多个字符数据,一切都会变得方便简单。"我需要3个符号的历史记录(收盘价),并映射到图表上。有什么其他方法可以从EA获得接近的历史吗?而且我还得做一个 "菜园",从EA中提取结果(在一个单独的窗口中)!2."至于查阅历史的问题,没有普遍的解决办法。终端无法提前预测用户的需求,即专家顾问是想只获得一个日期还是想请求整个可用的历史"。没有必要预测消费者的愿望。你只需要 "告诉 "数据在符号和所有方面处于什么状态!!。然后,用户将清楚地知道接下来要执行什么行动。3."但是,如果程序员不注重 "亲自 "重写终端的要求,他就会在现有功能中找到解决方案。我没有说,更没有要求 "为自己 "做些什么,当然,解决方案总是会在现有功能中找到。4."如果根本没有解决方案,这时就会出现扩展功能的问题。"你不需要扩展功能,你只需为方便使用和速度引入小的变化。5."用一个具体的代码描述一个具体的问题,不要泛泛而谈。否则,你会得到被误解的功能,一个单一的功能膨胀成 "一切都错了 "和 "一切都不方便 " 的"好吧,我准备用一个具体的代码来 "扩展 "解释这个问题。只是,不幸的是,你不能 "依靠 "参考书...谢谢你的答复。 Vladimir Karputov 2015.03.30 15:48 #114 Mikalas: 一如既往, 用户的立场 是我是宇宙的中心,世界围绕着我转。你必须使用现有的功能。特别是由于已经不止一次表明如何获得数据。 Mikhail Filimonov 2015.03.30 15:50 #115 barabashkakvn: 一如既往,用户的立场是我是宇宙的中心,世界围绕着我转。你必须使用现有的功能。特别是由于已经不止一次表明如何获得数据。 2x2是多少钱? Prival-2 2015.03.30 16:06 #116 barabashkakvn: 一如既往,用户的立场是我是宇宙的中心,世界围绕着我转。你必须使用你所拥有的功能。此外,已经不止一次地展示了如何获得数据。而你认为这是另一种方式。宇宙的中心是开发商,世界围绕着他们转?是这样吗?然后回答一个问题:这个终端是为谁开发的?他们是为自己做还是为用户做?如果他们为自己做,没有问题......。没关系的。而如果是为了用户,那么至少应该听取他们的意见...... Mikhail Filimonov 2015.03.31 03:43 #117 antt : ...........用特定的代码描述一个特定的问题,而不是一概而论。否则,事实证明,被误解的单个功能的功能被炸毁为“一切都错了”和“一切都不方便”。描述:真实账户 FORTS 经纪人。问题 - 我没有得到时间序列数据。 1、图片显示终端有数据。 2. 这是代码: //+------------------------------------------------------------------+ //| Ind_test.mq5 | //| Copyright 2015, Mikalas | //| http://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2015, Mikalas" #property link "http://www.mql5.com" #property version "1.00" // #property indicator_separate_window #property indicator_buffers 1 #property indicator_plots 1 //--- plot Label1 #property indicator_label1 "Data" #property indicator_type1 DRAW_LINE #property indicator_color1 clrYellow #property indicator_style1 STYLE_SOLID #property indicator_width1 1 //--- ENUM_TIMEFRAMES time_frame; //Таймфрейм // string sec_symbol; // input string StartData = "2015.03.16" ; //Дата начала расчёта индикатора //--- indicator buffers double MainBuffer[]; //--- datetime start_time; datetime end_time; datetime sec_times[]; // int sec_bars; // int next_month; //+------------------------------------------------------------------+ //| Indicator Expert set second symbol function | //+------------------------------------------------------------------+ string SetSecSymbol( const string aSymbol ) { int str_tire = 0 ; int str_tochka = 0 ; ushort let_symbol; string str_month, str_year; long aYear; int str_size = StringLen ( aSymbol ); for ( int i = 0 ; i < str_size; i++ ) { let_symbol = StringGetCharacter ( aSymbol, i ); if ( let_symbol == '-' ) { str_tire = i; } if ( let_symbol == '.' ) { str_tochka = i; } } if ( ( str_tire != 0 ) && ( str_tochka != 0 ) ) { str_month = StringSubstr ( aSymbol, str_tire + 1 , str_tochka - str_tire - 1 ); str_year = StringSubstr ( aSymbol, str_tochka + 1 , str_size - str_tochka - 1 ); if ( str_month == "12" ) { str_month = IntegerToString ( next_month ); aYear = StringToInteger ( str_year ); aYear = aYear + 1 ; str_year = IntegerToString ( aYear ); } else { long aMonth = StringToInteger ( str_month ); aMonth = aMonth + next_month; if ( aMonth > 12 ) { aMonth = aMonth - 12 ; aYear = StringToInteger ( str_year ); aYear = aYear + 1 ; str_year = IntegerToString ( aYear ); } str_month = IntegerToString ( aMonth ); } } //--- Set new symbol return ( StringSubstr ( aSymbol, 0 , str_tire + 1 ) + str_month + "." + str_year ); } //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ bool CheckBrent( const string a_symbol ) { ushort let_symbol; int str_size = StringLen ( a_symbol ); for ( int i = 0 ; i < str_size; i++ ) { let_symbol = StringGetCharacter ( a_symbol, i ); if ( let_symbol == '-' ) { string str_info = StringSubstr ( a_symbol, 0 , i ); //--- if ( str_info == "BR" ) { return ( true ); } } } return ( false ); } //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit () { time_frame = PERIOD_CURRENT ; next_month = 3 ; //--- if ( CheckBrent( _Symbol ) ) next_month = 1 ; //--- sec_symbol = SetSecSymbol( _Symbol ); //--- SymbolSelect ( sec_symbol, true ); //--- end_time = datetime ( SymbolInfoInteger ( _Symbol , SYMBOL_EXPIRATION_TIME ) ); start_time = datetime ( StringToTime ( StartData ) + 19 * 3600 + 10 * 60 ); //--- IndicatorSetInteger ( INDICATOR_DIGITS , 0 ); IndicatorSetString ( INDICATOR_SHORTNAME , "FORTS" ); SetIndexBuffer ( 0 , MainBuffer, INDICATOR_DATA ); PlotIndexSetDouble ( 0 , PLOT_EMPTY_VALUE , EMPTY_VALUE ); ArraySetAsSeries ( MainBuffer, true ); //--- if ( ( TimeCurrent () - start_time ) < 60 ) { Print ( "Слишком мал промежуток времени!" ); return ( INIT_FAILED ); } //--- Print ( "OnInit: Получение баров для символа " , sec_symbol, "..." ); sec_bars = GetBars( sec_symbol, time_frame, start_time, end_time ); //--- return ( INIT_SUCCEEDED ); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ void OnDeinit ( const int reason ) { if ( reason == REASON_INITFAILED ) { ChartIndicatorDelete ( 0 , 1 , "FORTS" ); } } //+------------------------------------------------------------------+ // Custom indicator Check timer function | //+------------------------------------------------------------------+ bool CheckTimer( const uint start_value, const uint per_value ) { uint end_value = GetTickCount (); if ( end_value < start_value ) { if ( ( start_value - end_value ) >= per_value ) return ( true ); } else { if ( ( end_value - start_value ) >= per_value ) return ( true ); } return ( false ); } //+------------------------------------------------------------------+ //| Custom indicator Get local data function | //+------------------------------------------------------------------+ int GetLocalData( const string a_symbol, ENUM_TIMEFRAMES a_period, datetime start_date, datetime end_date ) { datetime times[ 1 ]; //--- long first_date = SeriesInfoInteger ( a_symbol, PERIOD_M1 , SERIES_TERMINAL_FIRSTDATE ); if ( first_date > 0 ) Print ( "GetLocalData: Первая дата в терминале есть." ); { //--- force timeseries build CopyTime ( a_symbol, a_period, datetime ( first_date ) + PeriodSeconds ( a_period ), 1 , times ); //--- check date first_date = SeriesInfoInteger ( a_symbol, PERIOD_M1 , SERIES_FIRSTDATE ); //--- if ( first_date > 0 && first_date <= long ( start_date ) ) { bool is_sync = bool ( SeriesInfoInteger ( a_symbol, a_period, SERIES_SYNCHRONIZED ) ); //--- if ( is_sync ) { Print ( "GetLocalData: Серия синхронизирована." ); return ( Bars ( a_symbol, a_period, start_date, end_date ) ); } } } Print ( "GetLocalData: Не удалось построить таймсерию!" ); return ( 0 ); } //+------------------------------------------------------------------+ //| Custom indicator Get server data function | //+------------------------------------------------------------------+ int LoadServerData( const string a_symbol, ENUM_TIMEFRAMES period, const datetime start_date, const datetime end_date ) { SeriesInfoInteger ( a_symbol, PERIOD_M1 , SERIES_SERVER_FIRSTDATE ); int fail_cnt = 0 ; //--- while ( fail_cnt < 10 ) { uint start_tick = GetTickCount (); //--- while ( !CheckTimer( start_tick, 5 ) ) { if ( SymbolIsSynchronized ( a_symbol ) ) { Print ( "LoadServerData: Символ синхронизирован." ); return ( GetLocalData( a_symbol, period, start_date, end_date ) ); } } fail_cnt++; start_tick = GetTickCount (); } Print ( "LoadServerData: Не удалось загрузить историю с сервера!" ); return ( 0 ); } //+------------------------------------------------------------------+ //| Custom indicator Get bars function | //+------------------------------------------------------------------+ int GetBars( string symbol, ENUM_TIMEFRAMES period, const datetime start_date, const datetime end_date ) { //---Check for symbol present if ( ! SymbolInfoInteger ( symbol, SYMBOL_SELECT ) ) { ResetLastError (); //--- if ( GetLastError () != ERR_MARKET_UNKNOWN_SYMBOL ) { SymbolSelect ( symbol, true ); } else { Print ( "GetBars: Неизвестный символ - " , symbol ); return ( 0 ); } } //---Check program if ( MQL5InfoInteger ( MQL5_PROGRAM_TYPE ) == PROGRAM_INDICATOR && Period () == period && Symbol () == symbol ) { Print ( "GetBars: Не пройдена проверка типа программы!" ); return ( 0 ); } //--- if ( SymbolIsSynchronized ( symbol ) ) { Print ( "GetBars: Символ синхронизирован." ); //---Check series syncronization bool is_sync = bool ( SeriesInfoInteger ( symbol, period, SERIES_SYNCHRONIZED ) ); if ( is_sync ) { Print ( "GetBars: Серия синхронизирована." ); return ( Bars ( symbol, period, start_date, end_date ) ); } else { Print ( "GetBars: Локальная загрузка..." ); return ( GetLocalData( symbol, period, start_date, end_date ) ); } } else { Print ( "GetBars: Символ НЕ синхронизирован. Загрузка данных с сервера..." ); return ( LoadServerData( symbol, period, start_date, end_date ) ); } //--- return ( 0 ); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate ( const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { int nStartBar = rates_total - prev_calculated; //--- ArraySetAsSeries ( time, true ); ArraySetAsSeries ( close, true ); ArraySetAsSeries ( sec_times, true ); //--- Print ( "OnCalculate: Получение баров для символа " , sec_symbol, "..." ); sec_bars = GetBars( sec_symbol, time_frame, start_time, end_time ); //--- if ( sec_bars < 1 ) { Print ( "OnCalculate: Не получены бары по символу - " , sec_symbol ); return ( prev_calculated ); } else { sec_bars = CopyTime ( sec_symbol, time_frame, 0 , sec_bars, sec_times ); if ( sec_bars < 1 ) { Print ( "OnCalculate: Не скопированы тийминги по символу - " , sec_symbol ); return ( prev_calculated ); } } Print ( "OnCalculate: Данные получены." ); return ( rates_total ); } //+------------------------------------------------------------------+ 3. 结果如下: 2015.03 . 31 06 : 39 : 16.826 Ind_test (BR- 4.15 ,M1) OnInit : Получение баров для символа BR- 5.15 ... 2015.03 . 31 06 : 39 : 16.827 Ind_test (BR- 4.15 ,M1) GetBars: Символ НЕ синхронизирован. Загрузка данных с сервера... 2015.03 . 31 06 : 39 : 16.848 Ind_test (BR- 4.15 ,M1) LoadServerData: Символ синхронизирован. 2015.03 . 31 06 : 39 : 16.848 Ind_test (BR- 4.15 ,M1) GetLocalData: Первая дата в терминале есть. 2015.03 . 31 06 : 39 : 16.848 Ind_test (BR- 4.15 ,M1) GetLocalData: Не удалось построить таймсерию! 2015.03 . 31 06 : 39 : 16.848 Ind_test (BR- 4.15 ,M1) OnCalculate : Получение баров для символа BR- 5.15 ... 2015.03 . 31 06 : 39 : 16.848 Ind_test (BR- 4.15 ,M1) GetBars: Символ синхронизирован. 2015.03 . 31 06 : 39 : 16.848 Ind_test (BR- 4.15 ,M1) GetBars: Серия синхронизирована. 2015.03 . 31 06 : 39 : 16.848 Ind_test (BR- 4.15 ,M1) OnCalculate : Не получены бары по символу - BR- 5.15 2015.03 . 31 06 : 39 : 49.379 Ind_test (ED- 6.15 ,M1) OnInit : Получение баров для символа ED- 9.15 ... 2015.03 . 31 06 : 39 : 49.379 Ind_test (ED- 6.15 ,M1) GetBars: Символ НЕ синхронизирован. Загрузка данных с сервера... 2015.03 . 31 06 : 39 : 49.399 Ind_test (ED- 6.15 ,M1) LoadServerData: Символ синхронизирован. 2015.03 . 31 06 : 39 : 49.399 Ind_test (ED- 6.15 ,M1) GetLocalData: Первая дата в терминале есть. 2015.03 . 31 06 : 39 : 49.399 Ind_test (ED- 6.15 ,M1) GetLocalData: Не удалось построить таймсерию! 2015.03 . 31 06 : 39 : 49.399 Ind_test (ED- 6.15 ,M1) OnCalculate : Получение баров для символа ED- 9.15 ... 2015.03 . 31 06 : 39 : 49.399 Ind_test (ED- 6.15 ,M1) GetBars: Символ синхронизирован. 2015.03 . 31 06 : 39 : 49.399 Ind_test (ED- 6.15 ,M1) GetBars: Серия синхронизирована. 2015.03 . 31 06 : 39 : 49.399 Ind_test (ED- 6.15 ,M1) OnCalculate : Не получены бары по символу - ED- 9.15 2015.03 . 31 06 : 39 : 55.555 Ind_test (Eu- 6.15 ,M1) OnInit : Получение баров для символа Eu- 9.15 ... 2015.03 . 31 06 : 39 : 55.555 Ind_test (Eu- 6.15 ,M1) GetBars: Символ НЕ синхронизирован. Загрузка данных с сервера... 2015.03 . 31 06 : 39 : 55.567 Ind_test (Eu- 6.15 ,M1) LoadServerData: Символ синхронизирован. 2015.03 . 31 06 : 39 : 55.567 Ind_test (Eu- 6.15 ,M1) GetLocalData: Первая дата в терминале есть. 2015.03 . 31 06 : 39 : 55.567 Ind_test (Eu- 6.15 ,M1) GetLocalData: Не удалось построить таймсерию! 2015.03 . 31 06 : 39 : 55.567 Ind_test (Eu- 6.15 ,M1) OnCalculate : Получение баров для символа Eu- 9.15 ... 2015.03 . 31 06 : 39 : 55.567 Ind_test (Eu- 6.15 ,M1) GetBars: Символ синхронизирован. 2015.03 . 31 06 : 39 : 55.567 Ind_test (Eu- 6.15 ,M1) GetBars: Серия синхронизирована. 2015.03 . 31 06 : 39 : 55.567 Ind_test (Eu- 6.15 ,M1) OnCalculate : Не получены бары по символу - Eu- 9.15 2015.03 . 31 06 : 40 : 01.683 Ind_test (GAZR- 6.15 ,M1) OnInit : Получение баров для символа GAZR- 9.15 ... 2015.03 . 31 06 : 40 : 01.683 Ind_test (GAZR- 6.15 ,M1) GetBars: Символ НЕ синхронизирован. Загрузка данных с сервера... 2015.03 . 31 06 : 40 : 01.694 Ind_test (GAZR- 6.15 ,M1) LoadServerData: Символ синхронизирован. 2015.03 . 31 06 : 40 : 01.694 Ind_test (GAZR- 6.15 ,M1) GetLocalData: Первая дата в терминале есть. 2015.03 . 31 06 : 40 : 01.694 Ind_test (GAZR- 6.15 ,M1) GetLocalData: Не удалось построить таймсерию! 2015.03 . 31 06 : 40 : 01.694 Ind_test (GAZR- 6.15 ,M1) OnCalculate : Получение баров для символа GAZR- 9.15 ... 2015.03 . 31 06 : 40 : 01.694 Ind_test (GAZR- 6.15 ,M1) GetBars: Символ синхронизирован. 2015.03 . 31 06 : 40 : 01.694 Ind_test (GAZR- 6.15 ,M1) GetBars: Серия синхронизирована. 2015.03 . 31 06 : 40 : 01.694 Ind_test (GAZR- 6.15 ,M1) OnCalculate : Не получены бары по символу - GAZR- 9.15 附加的文件: 20150331.log 7 kb Alexey Da 2015.03.31 08:11 #118 如何繁殖?终端连接打开,启动前从磁盘上删除所有符号的历史记录 从开始时的指标记录2015.03.31 11:00:35.611 tmp6 (GAZR-6.15,M1) OnInit: Получение баров для символа GAZR-9.15... 2015.03.31 11:00:35.611 tmp6 (GAZR-6.15,M1) GetBars: Символ НЕ синхронизирован. Загрузка данных с сервера... 2015.03.31 11:00:35.638 tmp6 (GAZR-6.15,M1) LoadServerData: Символ синхронизирован. 2015.03.31 11:00:35.638 tmp6 (GAZR-6.15,M1) GetLocalData: Не удалось построить таймсерию! 2015.03.31 11:00:35.638 tmp6 (GAZR-6.15,M1) OnCalculate: Получение баров для символа GAZR-9.15... 2015.03.31 11:00:35.638 tmp6 (GAZR-6.15,M1) GetBars: Символ синхронизирован. 2015.03.31 11:00:35.638 tmp6 (GAZR-6.15,M1) GetBars: Серия синхронизирована. 2015.03.31 11:00:35.638 tmp6 (GAZR-6.15,M1) OnCalculate: Не получены бары по символу - GAZR-9.15 2015.03.31 11:00:36.306 tmp6 (GAZR-6.15,M1) OnCalculate: Получение баров для символа GAZR-9.15... 2015.03.31 11:00:36.306 tmp6 (GAZR-6.15,M1) GetBars: Символ синхронизирован. 2015.03.31 11:00:36.306 tmp6 (GAZR-6.15,M1) GetBars: Серия синхронизирована. 2015.03.31 11:00:36.306 tmp6 (GAZR-6.15,M1) OnCalculate: Данные получены. 2015.03.31 11:00:37.123 tmp6 (GAZR-6.15,M1) OnCalculate: Получение баров для символа GAZR-9.15... 2015.03.31 11:00:37.123 tmp6 (GAZR-6.15,M1) GetBars: Символ синхронизирован. 2015.03.31 11:00:37.123 tmp6 (GAZR-6.15,M1) GetBars: Серия синхронизирована. 2015.03.31 11:00:37.123 tmp6 (GAZR-6.15,M1) OnCalculate: Данные получены. 正如你所看到的,从开始的那一刻起,不到一秒钟的时间,符号数据就可用于指标。 Mikhail Filimonov 2015.03.31 12:56 #119 alexvd:如何繁殖?终端连接打开,启动前从磁盘上删除所有符号的历史记录 从开始时的指标记录正如你所看到的,从开始的那一刻起,不到一秒钟,符号上的数据就可用于指标。下午好!即SECONDS不是电子交易的时间?换句话说,有了同步的符号 和同步的时间序列,我们无法得到酒吧(立即)--这是否正常?(对我来说)这是个错误。2015.03.31 11:00:35.638 tmp6 (GAZR-6.15,M1) GetBars: Символ синхронизирован. 2015.03.31 11:00:35.638 tmp6 (GAZR-6.15,M1) GetBars: Серия синхронизирована. 2015.03.31 11:00:35.638 tmp6 (GAZR-6.15,M1) OnCalculate: Не получены бары по символу - GAZR-9.152.当TERMINAL有 数据时(见图,3月16日以后的所有条形图),我们被迫转到服务器,这正常吗?带来的不便和获取信息所需的漫长时间(对我来说) 是显而易见的。2015.03.31 11:00:35.611 tmp6 (GAZR-6.15,M1) OnInit: Получение баров для символа GAZR-9.15... 2015.03.31 11:00:35.611 tmp6 (GAZR-6.15,M1) GetBars: Символ НЕ синхронизирован. Загрузка данных с сервера... Anton 2015.03.31 13:56 #120 Mikalas:下午好!那么,电子商务中的SECOND不是时间吗? 从一开始的一秒钟,即在开始时的一次。"不是时候。" 1...5678910111213141516171819...31 新评论 原因: 取消 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
呕吐,爱德华,呕吐=)
我理解这一点,但为什么不能用我上面描述的方式来做呢?
它不会对处理信息的速度产生任何影响。
如果有任何关于工具的信息--记录它首次出现的日期,并将其存储在内存中--8个字节
你甚至可以不存储它,但当你做SymbolSelect()时,你把它放到内存中。
当我们用SeriesInfoInteger (SERIES_TERMINAL_FIRSTDATE)函数处理它时,我们得到了。
A -1 - 无数据
Б.0 - 没有数据,但尚未准备好
В.A--第一个信息的日期
然后,一切都会变得清晰和透明。
-1 - 进入服务器
0 - 我们等待下一次迭代来检查和/或建立时间序列。
> 0 建立时间序列
从你的参考资料中,我了解到你几乎是这样做的,结果不是。
显然,一个程序员开始写,另一个人完成了
你的实施对FOREX来说是好的,但对FORTS来说是非常不方便的。
对于FORTS来说,报价可能在很长一段时间内不会出现,时间序列是从平台上下载的。
而你必须再次重复整个数据检索过程,而且是在服务器登录的情况下!
使用专家顾问来处理多个符号数据,一切都将变得方便和简单。MT5环境中的指标主要是为了快速计算其时间序列数据并在图表上显示计算结果。随着平台的发展,他们获得了许多专家可用的功能,但基本的架构限制仍然存在。而且没有理由完全消除指标和EA之间的差异。我想再次提醒你,最重要的区别是,专家顾问有自己的处理流程。这些指标是在一个服务流程中计算的,这个流程还执行许多其他功能。这就是为什么即使我们与专家顾问有共同的功能,也是以不同的方式实现的。
至于查阅历史的问题,没有通用的解决方案。终端无法提前预测用户的需求,即专家顾问是想只获得一个日期还是想请求整个可用的历史。终端选择快速访问时间框架,即在用户的要求下,它试图完整地缓存当前(与服务器同步)的历史状态。是的,有一类应用,这种方法是不方便的。但如果程序员不关注 "亲自 "重写终端的需求,他将在现有功能中找到解决方案。如果根本没有解决方案,才会出现扩展功能的问题。
用一个具体的代码描述一个具体的问题,不要泛泛而谈。否则,你会得到一个难以理解的功能,一个单一的功能被膨胀成 "一切都错了 "和 "一切都不方便"。
使用专家顾问来处理多个符号数据,一切都将变得方便和简单。MT5环境中的指标主要是为了对其时间序列数据进行快速计算,并将计算结果显示在图表上。随着平台的发展,他们获得了许多专家可用的功能,但基本的架构限制仍然存在。而且没有理由完全消除指标和EA之间的差异。我想再次提醒你,最重要的区别是,专家顾问有自己的处理流程。这些指标是在一个服务流程中计算的,这个流程还执行许多其他功能。这就是为什么即使是与专家顾问共享的功能也以不同的方式实现。
至于获取历史的问题,没有普遍的解决办法。终端无法提前预测用户的需求,即专家顾问是想只获得一个日期,还是想请求整个可用的历史。终端做出了有利于快速访问时间框架的选择,即应用户的要求,它试图完整地缓存当前(与服务器同步)的历史状态。是的,有一类应用,这种方法是不方便的。但如果程序员不关注 "亲自 "重写终端的需求,他将在现有功能中找到解决方案。如果根本没有解决方案,才会出现扩展功能的问题。
用一个具体的代码描述一个具体的问题,不要泛泛而谈。否则,你会得到一个难以理解的功能,一个单一的功能被膨胀成 "一切都错了 "和 "一切都不方便"。
你好,安东!
让我们 "分解 "一下你的答案。
1."使用专家来处理多个字符数据,一切都会变得方便简单。"
我需要3个符号的历史记录(收盘价),并映射到图表上。
有什么其他方法可以从EA获得接近的历史吗?
而且我还得做一个 "菜园",从EA中提取结果(在一个单独的窗口中)!
2."至于查阅历史的问题,没有普遍的解决办法。终端无法提前预测用户的需求,即专家顾问是想只获得一个日期还是想请求整个可用的历史"。
没有必要预测消费者的愿望。你只需要 "告诉 "数据在符号和所有方面处于什么状态!!。
然后,用户将清楚地知道接下来要执行什么行动。
3."但是,如果程序员不注重 "亲自 "重写终端的要求,他就会在现有功能中找到解决方案。
我没有说,更没有要求 "为自己 "做些什么,当然,解决方案总是会在现有功能中找到。
4."如果根本没有解决方案,这时就会出现扩展功能的问题。"
你不需要扩展功能,你只需为方便使用和速度引入小的变化。
5."用一个具体的代码描述一个具体的问题,不要泛泛而谈。否则,你会得到被误解的功能,一个单一的功能膨胀成 "一切都错了 "和 "一切都不方便 " 的"
好吧,我准备用一个具体的代码来 "扩展 "解释这个问题。
只是,不幸的是,你不能 "依靠 "参考书...
谢谢你的答复。
一如既往,用户的立场是我是宇宙的中心,世界围绕着我转。你必须使用现有的功能。特别是由于已经不止一次表明如何获得数据。
一如既往,用户的立场是我是宇宙的中心,世界围绕着我转。你必须使用你所拥有的功能。此外,已经不止一次地展示了如何获得数据。
而你认为这是另一种方式。宇宙的中心是开发商,世界围绕着他们转?是这样吗?
然后回答一个问题:这个终端是为谁开发的?他们是为自己做还是为用户做?
如果他们为自己做,没有问题......。没关系的。
而如果是为了用户,那么至少应该听取他们的意见......
...........
用特定的代码描述一个特定的问题,而不是一概而论。否则,事实证明,被误解的单个功能的功能被炸毁为“一切都错了”和“一切都不方便”。
描述:
真实账户 FORTS 经纪人。
问题 - 我没有得到时间序列数据。
1、图片显示终端有数据。
2. 这是代码:
3. 结果如下:
如何繁殖?
终端连接打开,启动前从磁盘上删除所有符号的历史记录
从开始时的指标记录
正如你所看到的,从开始的那一刻起,不到一秒钟的时间,符号数据就可用于指标。
如何繁殖?
终端连接打开,启动前从磁盘上删除所有符号的历史记录
从开始时的指标记录
正如你所看到的,从开始的那一刻起,不到一秒钟,符号上的数据就可用于指标。
下午好!
即SECONDS不是电子交易的时间?
换句话说,有了同步的符号 和同步的时间序列,我们无法得到
酒吧(立即)--这是否正常?
(对我来说)这是个错误。
2.当TERMINAL有 数据时(见图,3月16日以后的所有条形图),我们被迫转到服务器,这正常吗?
带来的不便和获取信息所需的漫长时间(对我来说) 是显而易见的。
下午好!
那么,电子商务中的SECOND不是时间吗?