You are missing trading opportunities:
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
Registration
Log in
You agree to website policy and terms of use
If you do not have an account, please register
Howto solve the lack of mixed type datastructure
Hi folks,
I've got a lot of private messages asking me for helping with some pieces of code.
Here you can post your questions related to MQL4, and I'll do my best to answer them.Hello,
I would like to use your invitation to pose the following problem.
What would be the best solution to storing and sorting a list of symbols based on their price changes since one cannot use a mixed type datastructure like: EURUSD->1.29, USDGBP->0.22 ?
There is no enum and there are no mixed type data structures that can hold a string and a related double value in mql4. The solutions I can think of is either to use a file, but that would require almost constant disk reading and writing activity. Or to use three arrays; 1 for the symbol list, one for the storage and tracking of index place values and one for the actual values.
Seems one has to code arround a very basic (simple) problem. The only thing I would like is to compare all the euro pairs to each other for relative strength. How would you solve this, what datastructure would you recommend ?
Thank's for any answers or directions to this newbie !
Bibberpool
Search For Relative Strength and Correlation Indicators
Hello,
What would be the best solution to storing and sorting a list of symbols based on their price changes since one cannot use a mixed type datastructure like: EURUSD->1.29, USDGBP->0.22 ?
...
Seems one has to code arround a very basic (simple) problem. The only thing I would like is to compare all the euro pairs to each other for relative strength. How would you solve this, what datastructure would you recommend ?
Thank's for any answers or directions to this newbie ! BibberpoolHi Bibberpool,
Search this Forex TSD site for Relative Strength indicators and Correlation indicators...
These type of indicators are designed to analyze different pairs and prices and their relative strengths.
You may find good examples for what you want to do.
Hope this helps,
Robert
Thank you for your answer
Hi Bibberpool,
Search this Forex TSD site for Relative Strength indicators and Correlation indicators...
These type of indicators are designed to analyze different pairs and prices and their relative strengths.
You may find good examples for what you want to do.
Hope this helps,
RobertHi thank you for your answer and I will certainly search the suggested threads. However there is just so much code arround.
In the meanwhile I did a short prototype in C. Just took a basic insertion sort since the data consists only out of small sets and updated that routine to update a string array accordingly.
I will (copy/paste) port it to my first mql4 program later this week. Here's the code maybe it's usefull to others or someone wants to comment on it to create something better.
#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;
}
the program should print:
--- before
3 - EURUSD
5 - EURGBP
2 - EURJPY
1 - EURCHF
4 - EURCAD
--- after
1 - EURCHF
2 - EURJPY
3 - EURUSD
4 - EURCAD
5 - EURGBP
Looking for indies from author Kravchuk
Hi Community,
I am looking for indies from author Kravchuk, who designs indies for sell. I was willing to buyu but we can't recomcile on form of payment (not amount!?). Does anyone have his indies ft.dejavu, ft .rainbow,barstatline,diver,linerenko? I would appreciate your help. Thank you
Hi Community, I am looking for indies from author Kravchuk, who designs indies for sell. I was willing to buyu but we can't recomcile on form of payment (not amount!?). Does anyone have his indies ft.dejavu, ft .rainbow,barstatline,diver,linerenko? I would appreciate your help. Thank you
Hi bershk,
If your request isn't obsolete yet we may help here - we did work with some of these indicators.
Please note you should buy license from the author and we don't provide any decompiled or illegally obtained stuff.
If you are interested to buy - here are current prices from the author:
Dejavu - $20; Rainbow - $15; Barstatline - $10; Diver - $20; LineRenko - $15.
If you need help to purchase them please write us to info@raitsoft.com, we will help to buy license without any commission.
hallo friends ...................
i have been starting learning to program in mql4, and for start iam analayzing idicators and ea .
i heve "daily_close _line" indicator and i looked at the code and run out thise tow lines of code which i heve no idea what they are doing and how they work.
may same one please take a look at the code and tell me whats going on.
thanks a loot in advance.
eran
//* 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
It is doing the following : it finds the daily open price (taking into account TimeZoneOfData as time zone shift) and draws that line through that day. Here is a picture at which it us easy to see how it draws the same daily open price trough the day :
i have been starting learning to program in mql4, and for start iam analayzing idicators and ea .
i heve "daily_close _line" indicator and i looked at the code and run out thise tow lines of code which i heve no idea what they are doing and how they work.
may same one please take a look at the code and tell me whats going on.
thanks a loot in advance.
eran
//* 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
It is doing the following : it finds the daily open price (taking into account TimeZoneOfData as time zone shift) and draws that line through that day. Here is a picture at which it us easy to see how it draws the same daily open price trough the day :
sory i ment thise line :
double barsper30= 1.0*PERIOD_M30/Period();
and thise one also.
lastbar= MathMin(Bars-20*barsper30-1, lastbar);
for what the "20" and "-1" and how the 2 lines work together?
thank you a loot.
Originally wrote something else.
Forget about those lines : they are, for some reason trying to limit the start where values are started to be calculated (and that should be some hours from the oldest bar on chart). What did the coder want to achieve with it maybe known only to him
sory i ment thise line :
double barsper30= 1.0*PERIOD_M30/Period();
and thise one also.
lastbar= MathMin(Bars-20*barsper30-1, lastbar);
for what the "20" and "-1" and how the 2 lines work together?
thank you a loot.thanks a loot my friend .....you helped me