Спрашивайте! - страница 173

 

Как решить проблему отсутствия структуры данных смешанных типов

codersguru:
Привет, друзья!

Я получил много личных сообщений с просьбой помочь мне с некоторыми частями кода.

Здесь вы можете задавать свои вопросы, связанные с MQL4, и я постараюсь ответить на них.

Здравствуйте,

Я хотел бы воспользоваться вашим приглашением для постановки следующей проблемы.

Каким будет наилучшее решение для хранения и сортировки списка символов на основе изменения их цены, поскольку нельзя использовать структуру данных смешанного типа, например: EURUSD->1.29, USDGBP->0.22?

В mql4 нет перечислений и нет структур данных смешанного типа, которые могут хранить строку и связанное с ней двойное значение. Решения, которые я могу придумать, это либо использовать файл, но это потребует почти постоянного чтения и записи на диск. Или использовать три массива: один для списка символов, один для хранения и отслеживания значений индексных мест и один для фактических значений.

Кажется, что приходится обходить очень простую проблему. Единственное, что мне хотелось бы, это сравнить все пары евро друг с другом на предмет относительной силы. Как бы вы решили эту задачу, какую структуру данных вы бы порекомендовали?

Спасибо за любые ответы или указания для этого новичка!

Bibberpool

 

Поиск индикаторов относительной силы и корреляции

liverpool:
Здравствуйте,

Какое решение будет наилучшим для хранения и сортировки списка символов на основе изменения их цены, поскольку нельзя использовать структуру данных смешанного типа, например: EURUSD->1.29, USDGBP->0.22?

...

Кажется, что приходится обходить очень простую проблему. Единственное, что мне хотелось бы, это сравнить все пары евро друг с другом на предмет относительной силы. Как бы вы решили эту задачу, какую структуру данных вы бы порекомендовали?

Спасибо за любые ответы или указания для этого новичка! Бибберпул

Привет, Бибберпул,

Поищите на этом сайте Forex TSD индикаторы относительной силы и индикаторы корреляции...

Эти типы индикаторов предназначены для анализа различных пар и цен и их относительной силы.

Вы можете найти хорошие примеры для того, что вы хотите сделать.

Надеюсь, это поможет,

Роберт

 

Спасибо за ваш ответ

cosmiclifeform:
Привет, Бибберпул,

Поищите на этом сайте Forex TSD индикаторы относительной силы и индикаторы корреляции...

Эти типы индикаторов предназначены для анализа различных пар и цен и их относительной силы.

Вы можете найти хорошие примеры для того, что вы хотите сделать.

Надеюсь, это поможет,

Роберт

Привет, спасибо за ваш ответ, и я обязательно поищу в предложенных темах. Однако вокруг так много кода.

Тем временем я сделал небольшой прототип на C. Просто взял базовую сортировку вставкой, поскольку данные состоят только из небольших наборов, и обновил эту процедуру для обновления массива строк соответствующим образом.

В конце этой недели я перенесу его (копирование/вставка) в свою первую программу на mql4. Вот код, возможно, он будет полезен другим или кто-то захочет прокомментировать его, чтобы создать что-то лучшее.

#include

int main(void) {

int max = 5;

int array[5] = { 3, 5, 2, 1, 4 };

char *symbl[5] = { "EURUSD", "EURGBP", "EURJPY", "EURCHF", "EURCAD" };

int idx = 0;

int swp = 0;

int tmp = 0;

char *tmpsymb = NULL;

printf("--- before\n");

for(idx = 0; idx <= max - 1; idx++) {

printf("%d - %s\n", array, symbl);

}

for(idx = 1 ; idx <= max - 1; idx++) {

swp = idx;

while(swp > 0 && array[swp] < array[swp - 1]) {

tmp = array[swp];

tmpsymb = symbl[swp];

array[swp] = array[swp - 1];

symbl[swp] = symbl[swp - 1];

array[swp - 1] = tmp;

symbl[swp - 1] = tmpsymb;

swp--;

}

}

printf("--- after\n");

for(idx = 0; idx <= max - 1; idx++) {

printf("%d - %s\n", array, symbl);

}

return 0;

}

Программа должна печатать:

--- перед

3 - EURUSD

5 - EURGBP

2 - EURJPY

1 - EURCHF

4 - EURCAD

--- после

1 - EURCHF

2 - EURJPY

3 - EURUSD

4 - EURCAD

5 - EURGBP

 

Ищу инди от автора Кравчук

Привет сообщество,

Я ищу инди от автора Кравчука, который разрабатывает инди для продажи. Я был готов купить, но мы не можем договориться о форме оплаты (не о сумме!?). Есть ли у кого-нибудь его инди ft.dejavu, ft .rainbow, barstatline, diver, linerenko? Буду признателен за помощь. Спасибо

 
bershk:
Привет сообщество, я ищу инди от автора Кравчука, который разрабатывает инди для продажи. Я готов купить, но мы не можем договориться о форме оплаты (не о сумме!?). Есть ли у кого-нибудь его инди ft.dejavu, ft .rainbow, barstatline, diver, linerenko? Буду признателен за помощь. Спасибо

Здравствуйте, bershk,

Если ваш запрос еще не устарел, мы можем помочь вам - мы работали с некоторыми из этих индикаторов.

Пожалуйста, обратите внимание, что вы должны купить лицензию у автора, и мы не предоставляем декомпилированные или незаконно полученные материалы.

Если вы заинтересованы в покупке - вот текущие цены от автора:

Dejavu - $20; Rainbow - $15; Barstatline - $10; Diver - $20; LineRenko - $15.

Если вам нужна помощь в их приобретении, пожалуйста, напишите нам на info@raitsoft.com, мы поможем купить лицензию без комиссии.

 

привет друзья ...................

Я начал учиться программировать в mql4, и для начала я анализирую индикаторы и ea.

У меня есть индикатор "daily_close _line", я посмотрел на код и обнаружил эти буксируемые строки кода, которые я понятия не имею, что они делают и как они работают.

может ли кто-нибудь взглянуть на код и сказать мне, что происходит.

заранее спасибо.

Эран

//*

//* my_DailyOpen_indicator

//*

//* Revision 1.1 2005/11/13 Midnite

//* Initial DailyOpen indicator

//* based pm

//*

#property copyright "Midnite"

#property link "me@home.net"

#property indicator_chart_window

#property indicator_buffers 1

#property indicator_color1 DodgerBlue

#property indicator_style1 2

#property indicator_width1 1

double TodayOpenBuffer[];

extern int TimeZoneOfData= 0;

//+------------------------------------------------------------------+

//| Custom indicator initialization function |

//+------------------------------------------------------------------+

int init()

{

SetIndexStyle(0,DRAW_LINE);

SetIndexBuffer(0,TodayOpenBuffer);

SetIndexLabel(0,"Open");

SetIndexEmptyValue(0,0.0);

return(0);

}

//+------------------------------------------------------------------+

//| Custor indicator deinitialization function |

//+------------------------------------------------------------------+

int deinit()

{

return(0);

}

//+------------------------------------------------------------------+

//| Custom indicator iteration function |

//+------------------------------------------------------------------+

int start()

{

int lastbar;

int counted_bars= IndicatorCounted();

if (counted_bars>0) counted_bars--;

lastbar = Bars-counted_bars;

DailyOpen(0,lastbar);

return (0);

}

//+------------------------------------------------------------------+

//| |

//+------------------------------------------------------------------+

int DailyOpen(int offset, int lastbar)

{

int shift;

int tzdiffsec= TimeZoneOfData * 3600;

double barsper30= 1.0*PERIOD_M30/Period();

bool ShowDailyOpenLevel= True;//<<<<---------- thise line-------------------------------

// lastbar+= barsperday+2; // make sure we catch the daily open

lastbar= MathMin(Bars-20*barsper30-1, lastbar);//<<<<-------------------thise line-----------------------

for(shift=lastbar;shift>=offset;shift--){

TodayOpenBuffer[shift]= 0;

if (ShowDailyOpenLevel){

if(TimeDay(Time[shift]-tzdiffsec) != TimeDay(Time[shift+1]-tzdiffsec)){ // day change

TodayOpenBuffer[shift]= Open[shift];

TodayOpenBuffer[shift+1]= 0; // avoid stairs in the line

}

else{

TodayOpenBuffer[shift]= TodayOpenBuffer[shift+1];

}

}

}

return(0);

}
 

ERAN123

Он делает следующее: он находит дневную цену открытия (с учетом TimeZoneOfData как сдвига часового пояса) и рисует линию через этот день. Вот картинка, на которой легко увидеть, как она рисует ту же самую дневную цену открытия через день:

ERAN123:
Я начал изучать программирование на mql4, и для начала я анализирую идикаторы и ea.

У меня есть индикатор "daily_close _line", я посмотрел его код и обнаружил эти буксируемые строки кода, которые я понятия не имею, что они делают и как они работают.

может ли кто-нибудь взглянуть на код и сказать мне, что происходит.

заранее спасибо.

Эран

//*

//* my_DailyOpen_indicator

//*

//* Revision 1.1 2005/11/13 Midnite

//* Initial DailyOpen indicator

//* based pm

//*

#property copyright "Midnite"

#property link "me@home.net"

#property indicator_chart_window

#property indicator_buffers 1

#property indicator_color1 DodgerBlue

#property indicator_style1 2

#property indicator_width1 1

double TodayOpenBuffer[];

extern int TimeZoneOfData= 0;

//+------------------------------------------------------------------+

//| Custom indicator initialization function |

//+------------------------------------------------------------------+

int init()

{

SetIndexStyle(0,DRAW_LINE);

SetIndexBuffer(0,TodayOpenBuffer);

SetIndexLabel(0,"Open");

SetIndexEmptyValue(0,0.0);

return(0);

}

//+------------------------------------------------------------------+

//| Custor indicator deinitialization function |

//+------------------------------------------------------------------+

int deinit()

{

return(0);

}

//+------------------------------------------------------------------+

//| Custom indicator iteration function |

//+------------------------------------------------------------------+

int start()

{

int lastbar;

int counted_bars= IndicatorCounted();

if (counted_bars>0) counted_bars--;

lastbar = Bars-counted_bars;

DailyOpen(0,lastbar);

return (0);

}

//+------------------------------------------------------------------+

//| |

//+------------------------------------------------------------------+

int DailyOpen(int offset, int lastbar)

{

int shift;

int tzdiffsec= TimeZoneOfData * 3600;

double barsper30= 1.0*PERIOD_M30/Period();

bool ShowDailyOpenLevel= True;//<<<<---------- thise line-------------------------------

// lastbar+= barsperday+2; // make sure we catch the daily open

lastbar= MathMin(Bars-20*barsper30-1, lastbar);//<<<<-------------------thise line-----------------------

for(shift=lastbar;shift>=offset;shift--){

TodayOpenBuffer[shift]= 0;

if (ShowDailyOpenLevel){

if(TimeDay(Time[shift]-tzdiffsec) != TimeDay(Time[shift+1]-tzdiffsec)){ // day change

TodayOpenBuffer[shift]= Open[shift];

TodayOpenBuffer[shift+1]= 0; // avoid stairs in the line

}

else{

TodayOpenBuffer[shift]= TodayOpenBuffer[shift+1];

}

}

}

return(0);

}
Файлы:
daly_open.gif  30 kb
 
mladen:
ЭРАН123

Он делает следующее: он находит дневную цену открытия (с учетом TimeZoneOfData как сдвига часового пояса) и рисует линию через этот день. Вот картинка, на которой легко увидеть, как она рисует ту же самую дневную цену открытия через день:

sory i ment this line :

double barsper30= 1.0*PERIOD_M30/Period();

и эту тоже.

lastbar= MathMin(Bars-20*barsper30-1, lastbar);

для чего нужны "20" и "-1" и как эти 2 строки работают вместе?

спасибо большое.

 

Изначально писал что-то другое.

Забудьте про эти строки: они почему-то пытаются ограничить начало, с которого начинают рассчитываться значения (а это должно быть несколько часов от самого старого бара на графике). Чего хотел добиться этим кодер, возможно, известно только ему.

ERAN123:
Извините, что я упоминаю эту строку:

double barsper30= 1.0*PERIOD_M30/Period();

и вот это тоже.

lastbar= MathMin(Bars-20*barsper30-1, lastbar);

для чего нужны "20" и "-1" и как эти 2 строки работают вместе?

спасибо вам большое.
 

спасибо большое моему другу .....you помог мне