Что здесь не так? Я уже все, что можно перепробовал! Хэндл присваивает, а при копировании пишет ошибку 4806!
int TradeSignal_20() { int sig=0; if(h_ich==INVALID_HANDLE) { h_ich=iIchimoku(Symbol(),Period(),IKHtenkansen,IKHkijunsen,IKHsenkouspanb); return(0); } else { if(CopyBuffer(h_ich,0,0,2,ich1_buffer)<2) return(0); if(CopyBuffer(h_ich,1,0,2,ich2_buffer)<2) return(0); if(!ArraySetAsSeries(ich1_buffer,true)) return(0); if(!ArraySetAsSeries(ich2_buffer,true)) return(0); } //--- проводим проверку условия и устанавливаем значение для sig if(ich1_buffer[1]>ich2_buffer[1]) sig=1; else if(ich1_buffer[1]<ich2_buffer[1]) sig=-1; else sig=0; //--- возвращаем торговый сигнал return(sig); }есть еще замечание не понятно зачем вы прописали эти присваивания
symbol = _symbol; timeframe = _timeframe;можно это сделать так
bool HeikenAshi::Create(string _symbol,ENUM_TIMEFRAMES _timeframe) { handle = iCustom( _symbol, _timeframe, "Examples\\Heiken_Ashi" ); if( handle < 0 ) { Print( "Ошибка при инициализации Heiken Ashi #: ", GetLastError() ); return( false ); } else Print( "Heiken Ashi Handle: ", handle ); if( CopyBuffer( handle, 0, 0, 32, open ) ) { Print( "Ошибка при копировании open[] #:", GetLastError() ); return( false ); } if( CopyBuffer( handle, 1, 0, 32, high ) ) { Print( "Ошибка при копировании open[] #:", GetLastError() ); return( false ); } if( CopyBuffer( handle, 2, 0, 32, low ) ) { Print( "Ошибка при копировании open[] #:", GetLastError() ); return( false ); } if( CopyBuffer( handle, 3, 0, 32, close ) ) { Print( "Ошибка при копировании open[] #:", GetLastError() ); return( false ); } ArraySetAsSeries( open, true ); ArraySetAsSeries( high, true ); ArraySetAsSeries( low, true ); ArraySetAsSeries( close, true ); return( true ); }
bool HeikenAshi::Create(string _symbol,ENUM_TIMEFRAMES _timeframe) { int handle=iCustom(_symbol,_timeframe,"Examples\\Heiken_Ashi"); if(handle<0) { Print("Ошибка при инициализации Heiken Ashi #: ",GetLastError()); return(false); } else Print("Heiken Ashi Handle: ",handle); if(CopyBuffer(handle,0,0,32,open)<0) { Print("Ошибка при копировании open[] #:",GetLastError()); return(false); } else Print("Данные для open скопированы: "); if(CopyBuffer(handle,1,0,32,high)<0) { Print("Ошибка при копировании high[] #:",GetLastError()); return(false); } else Print("Данные для high скопированы: "); if(CopyBuffer(handle,2,0,32,low)<0) { Print("Ошибка при копировании low[] #:",GetLastError()); return(false); } else Print("Данные для low скопированы: "); if(CopyBuffer(handle,3,0,32,close)<0) { Print("Ошибка при копировании close[] #:",GetLastError()); return(false); } else Print("Данные для close скопированы: "); ArraySetAsSeries(open,true); ArraySetAsSeries(high,true); ArraySetAsSeries(low,true); ArraySetAsSeries(close,true); return(true); }
Что здесь не так? Я уже все, что можно перепробовал! Хэндл присваивает, а при копировании пишет ошибку 4806!
Как я понял тут присутсвует попытка реализовать "хитрый конструктор". (с) похоже... :)
Рекомендую сделать следующие вещи:
1. Перенести блок определяющий серийность массивов в основной конструктор
//Constructor HeikenAshi.HeikenAshi void HeikenAshi::HeikenAshi() { //----------------------------------------------------------------------------// //Work variables //----------------------------------------------------------------------------// ArraySetAsSeries(open, true); ArraySetAsSeries(high, true); ArraySetAsSeries(low, true); ArraySetAsSeries(close, true); //----------------------------------------------------------------------------// }
2. Оставить в этом "конструкторе" только получение хэндла
//Constructor HeikenAshi.Create bool HeikenAshi::Create(string _symbol,ENUM_TIMEFRAMES _timeframe) { //----------------------------------------------------------------------------// //Work variables double Result; //----------------------------------------------------------------------------// Result = true; handle = iCustom( _symbol, _timeframe, "Examples\\Heiken_Ashi" ); if(handle == INVALID_HANDLE) { Print( "Ошибка при инициализации Heiken Ashi #: ", GetLastError() ); Result = false; } //----------------------------------------------------------------------------// return(Result); //----------------------------------------------------------------------------// }
3. Получение данных вынести в отдельную функцию (с проверкой на инвалидность хэндла внутри этой функции)
В зависимости от реализации класса (два варианта)
1. С передачей хэндла в параметрах
//Constructor HeikenAshi.CopyData bool HeikenAshi::CopyData(int handle,int buffer_num,int start_pos,int count) { //----------------------------------------------------------------------------// //Work variables double Result; //----------------------------------------------------------------------------// //Check correctness of the handle if(handle == INVALID_HANDLE) { Print( "Ошибка при инициализации Heiken Ashi #: ", GetLastError() ); Result = false; } //Copying operational data //----------------------------------------------------------------------------// return( true ); //----------------------------------------------------------------------------// }
2. Хэндл индикатора берется у класса на прямую
//Constructor HeikenAshi.CopyData bool HeikenAshi::CopyData(int buffer_num,int start_pos,int count) { //----------------------------------------------------------------------------// //Work variables double Result; //----------------------------------------------------------------------------// //Check correctness of the handle if(handle == INVALID_HANDLE) { Print( "Ошибка при инициализации Heiken Ashi #: ", GetLastError() ); Result = false; } //Copying operational data //----------------------------------------------------------------------------// return( true ); //----------------------------------------------------------------------------// }
Спасибо за вашу помощь, но ничего не помогает... Вот выкидываю заголовочный файл... Накиньте код и протестите тестером стратегий, и если это заработает - я выкину свой ноут!!!
Единственное, я немного изменял код индикатора, но не думаю, что это могло повлиять...
Выкидываю все...
Спасибо за вашу помощь, но ничего не помогает... Вот выкидываю заголовочный файл... Накиньте код и протестите тестером стратегий, и если это заработает - я выкину свой ноут!!!
Единственное, я немного изменял код индикатора, но не думаю, что это могло повлиять...
Выкидываю все...
В индикаторе нет серийности массивов, в классе есть. Я правильно понял?
Видимо да... А что, так нельзя? Я не замечал нигде такого...
Немного о серийности массивов
Получаем дату 0 бара в истории.
Без указания что массив серия - 1993.05.13 00:00:00
С указанием серийности массива - 2010.08.06 20:00:00
Чувствуете разницу?
extern.fx, при инициализации индикатора в классе ошибки не возникало и если да то какая.
У меня выскакивает 4802 (не разобрался с чем связана)...
extern.fx, при инициализации индикатора в классе ошибки не возникало и если да то какая.
У меня выскакивает 4802 (не разобрался с чем связана)...
ERR_INDICATOR_CANNOT_CREATE |
4802 |
Индикатор не может быть создан |
ERR_INDICATOR_CANNOT_CREATE |
4802 |
Индикатор не может быть создан |

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Что здесь не так? Я уже все, что можно перепробовал! Хэндл присваивает, а при копировании пишет ошибку 4806!