несколько/весьма прискорбно(((
вопрос правильный, но предлагаемое автором ветки действо - включить в DLL то что принадлежит MQL-4
несколько/весьма прискорбно(((
Ага...
Торговые переменные проще и удобнее оставить на откуп MQL (иначе придется это реализовать посредством не самого полного кустарного API), в ДЛЛ надо перенесить расчетную часть, условия принятия решений и т.д.
HIDDEN, лучше выбрать какой-нибудь другой пример...
вопрос правильный, но предлагаемое автором ветки действо - включить в DLL то что принадлежит MQL-4
несколько/весьма прискорбно(((
Нет я не предлагаю весь MQL4 перенести в DLL. Я лишь хочу разобраться с моментом переноса части кода. Для примера привел код из MQL4, как спасти кусок от злосного декомпила? Перенести функцию в DLL. А вот как это правильно сделать и есть суть моего вопроса.
Ага...
Торговые переменные проще и удобнее оставить на откуп MQL (иначе придется это реализовать посредством не самого полного кустарного API), в ДЛЛ надо перенесить расчетную часть, условия принятия решений и т.д.
HIDDEN, лучше выбрать какой-нибудь другой пример...
Хорошо допустим вот из последнего в Code Base индикатор NonLagAMA. Допустим правила торговли мы оставляем штатно в MQL4. Сам индикатор перенесем в DLL и подключив DLL к эксперту научим торговать его по сигналам. Как сделать эту связку? Хотя до момента реализации нужно разобраться, что кроме расчётов можно переносить в DLL, а что совсем необезательно.
)
причны: у MQL-4 бесплатного распространения нет компиляции собственных DLL,
и также не известен API MQL-4 торговых функций
Если хотите уйти - посмотрите эту платформу
http://www.brocompany.com/trading-platform/srb/
OrderSend не переносится в DLL,
причны: у MQL-4 бесплатного распространения нет компиляции собственных DLL,
и также не известен API MQL-4 торговых функций
Если хотите уйти - посмотрите эту платформу
http://www.brocompany.com/trading-platform/srb/
Не уходить не собираюсь, еще с MT4 не полностью разобрался, хотя душа рвется переодически за пределы....
Простой учебный пример индикатора с длл на фортране:
//+------------------------------------------------------------------+ //| !__Ind_PWMA_DLL.mq4 | //| Copyright © 2006, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright © 2006, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" // #property indicator_chart_window #property indicator_buffers 1 #property indicator_color1 Red // #import "MT4_DLL.dll" double GetPWMAOnArray(int reset, int n_pol, int range, double& x0[]); #import //---- input parameters extern int N_Pol = 0; extern int Range = 14; //---- arrays double X0_Inp[]; //---- buffers double PWMA_Buffer[]; // //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ // int init() { ArrayResize(X0_Inp, Range); ArrayInitialize(X0_Inp, 0); //---- indicators SetIndexBuffer(0, PWMA_Buffer); SetIndexStyle(0, DRAW_LINE); SetIndexDrawBegin(0, Range); // GetPWMAOnArray(1, N_Pol, Range, X0_Inp); //---- return(0); } // //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ // int deinit() { //---- GetPWMAOnArray(1, N_Pol, Range, X0_Inp); //---- return(0); } // //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ // int start() { static int k = 0; // int counted_bars = IndicatorCounted(); int limit = Bars - counted_bars; int i, j; //---- for (i = limit - 1; i >= 0; i--) { if (k < Range) { for (j = Range - 2; j >= 0; j--) { X0_Inp[j + 1] = X0_Inp[j]; } X0_Inp[0] = Close[i]; // k++; } else { for (j = Range - 1; j >= 0; j--) { X0_Inp[j] = Close[i + j]; } } // PWMA_Buffer[i] = GetPWMAOnArray(1, N_Pol, Range, X0_Inp); } //---- return(0); } /* ! !************************* FORTRAN 90 :: MT4_DLL.f90 ************************ !************************* FORTRAN POWER STATION 4.0 ************************ !************************* FORTRAN MULTITHREADED DLL ************************ ! !ms$freeform !ms$declare ! !+--------------------------------------------------------------------------+ !| Степенно-взвешенная скользящая средняя по массиву x0[] | !+--------------------------------------------------------------------------+ ! real*8 function GetPWMAOnArray ( reset, n_pol, range, x0 ) ! !ms$if .not. defined ( LINKDIRECT ) !ms$attributes alias : 'GetPWMAOnArray' :: GetPWMAOnArray !ms$attributes value :: reset, n_pol, range !ms$attributes reference :: x0 !ms$attributes dllexport :: GetPWMAOnArray !ms$endif ! implicit none ! integer*4 :: reset, n_pol, range, i real*8 :: x0(0 : range) ! logical*4, static :: run_once = .false. integer*4, static :: wgt [allocatable] (:) real*8 , static :: w_sum = 0 real*8 :: pwma ! if ((n_pol < 0) .or. (range < 1)) then GetPWMAOnArray = 0.0 return end if ! if (reset == 1) then run_once = .false. if (allocated(wgt)) deallocate(wgt) GetPWMAOnArray = 0.0 !return end if ! if (.not. (run_once)) then if (.not. (allocated(wgt))) allocate(wgt(0 : range)) ! w_sum = 0.0 do i = range - 1, 0, -1 wgt(i) = (range - i) ** n_pol w_sum = w_sum + dfloat(wgt(i)) end do ! run_once = .true. end if ! pwma = 0.0 do i = range - 1, 0, -1 pwma = pwma + wgt(i) * x0(i) end do GetPWMAOnArray = pwma / w_sum ! end function GetPWMAOnArray */ //+------------------------------------------------------------------+
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Приветствую всех.
Во многих ветках данного форума, многие пишут о том, что свои функции пишите во внешней DLL и проблем потери кода будет намного меньше.
Так вот меня все таки захлестнул интерес, как написать во внешней DLL свою функцию, как правильно подключить её к эксперту, как протестировать на корректность её работы.
Если кто понимает в этом деле помогите разобраться...
Для примера взял код из первого поста ветки KimIV.
Подскажите как на данном несложном примере перевести функцию во внешнюю DLL.
Языки программирования на которых публикуете пример тоже пишите.