Is there a way I could use the same study for both plotting indicators and generating orders? As I understand it, I have to duplicate the code for both an indicator study and a signal study, with the former doing the plotting and the latter generating the orders. Seems such a waste to me, especially if I end up using lots of memory with arrays and the like. Could I get around this by using global variables and have all the order preparation work done by the indicator study and pass the type of order and quantity of contracts to the signal study so it can generate the actual order? Is anyone doing this?
I think one downside in using GV's this way is I can't use the optimize feature. That's OK as I can live with having another version of the signal study incorporating the same code as the indicator study with all the plot statements commented out. I wish there was a compiler "if" and "include" directives that can be used to include them in indicator studies, and automatically exclude them in signal studies. Better still, why not just have the compiler ignore and skip over the plot statements when complied as a signal study?
indicators and signals
- Marina Pashkova
- Posts: 2758
- Joined: 27 Jul 2007
Hi janus,
Well, as you know signals and indicators are different in their nature: signals can't draw plots and indicators can't generate orders.
If you want to keep things simple, you might want to have your logic coded as a function and then use this function from both an indicator and a signal.
Hope it helps.
Well, as you know signals and indicators are different in their nature: signals can't draw plots and indicators can't generate orders.
If you want to keep things simple, you might want to have your logic coded as a function and then use this function from both an indicator and a signal.
Hope it helps.
- TJ
- Posts: 7743
- Joined: 29 Aug 2006
- Location: Global Citizen
- Has thanked: 1033 times
- Been thanked: 2222 times
Hi janus,
Well, as you know signals and indicators are different in their nature: signals can't draw plots and indicators can't generate orders.
If you want to keep things simple, you might want to have your logic coded as a function and then use this function from both an indicator and a signal.
Hope it helps.
that's an idea.
I will give it a try too.
Thanks
Thanks Marina for the tip. That's what I've been doing all the time - it's a carry over of my 30 years of programming experience - the main program/study contains just a series of call statements to functions, and to break down complex code into functional blocks. This way it makes your code easier to understand..
So, my indicator studies now have a long list of plotn statements, which are selectively used depending on the outcomes of my functions. I've got all 999 plotn statements used, and I use a 2-d array to store the various attributes required to use plotn, plus a flag to control when to use the appropriate plotn. Obviously I didn't type all those statements - there are over 5,000 lines of code - I wrote in another language a program to write them into a text file, and then copied and pasted the contents into the study. I've also added logic to "free" an indicator so it can be re-used later by the code. To leave gaps in the lines, I choose either "point", "left tick", or "right tick" for all my lines. This is far more efficient than using trend lines. I use this mostly to plot support and resistance lines. The only downsides are: can't plot solid lines, can't plot vertical lines, only a limit of 999 lines crossing at any given bar.
As for the signal study, I do something similar - I have a series of different types orders that are selectively used depending on the results of the same functions used by the indicator study.
Despite all this, I still prefer to have both plots and strategy orders generated by the same study, but I can live with current way MC does things.
So, my indicator studies now have a long list of plotn statements, which are selectively used depending on the outcomes of my functions. I've got all 999 plotn statements used, and I use a 2-d array to store the various attributes required to use plotn, plus a flag to control when to use the appropriate plotn. Obviously I didn't type all those statements - there are over 5,000 lines of code - I wrote in another language a program to write them into a text file, and then copied and pasted the contents into the study. I've also added logic to "free" an indicator so it can be re-used later by the code. To leave gaps in the lines, I choose either "point", "left tick", or "right tick" for all my lines. This is far more efficient than using trend lines. I use this mostly to plot support and resistance lines. The only downsides are: can't plot solid lines, can't plot vertical lines, only a limit of 999 lines crossing at any given bar.
As for the signal study, I do something similar - I have a series of different types orders that are selectively used depending on the results of the same functions used by the indicator study.
Despite all this, I still prefer to have both plots and strategy orders generated by the same study, but I can live with current way MC does things.
@Janus,
i use pushpop.dll wich provides global variables.
i calculate the values in my signal, put them into a global variable and draw them in an indicator. Look in the forum here, i dont have the u r l here at the moment.
i can´t understand why i can not draw in an signal script, where i calculate my stops and targets. i want to see them in a chart.
doing this in separate sub-functions in the signal, the code is calculated twice and i have to setup 2 inputs the same way.
i use pushpop.dll wich provides global variables.
i calculate the values in my signal, put them into a global variable and draw them in an indicator. Look in the forum here, i dont have the u r l here at the moment.
i can´t understand why i can not draw in an signal script, where i calculate my stops and targets. i want to see them in a chart.
doing this in separate sub-functions in the signal, the code is calculated twice and i have to setup 2 inputs the same way.
I'm using the built-in global variable in MC to do something similar. My indicator study does all the work to draw the lines and creates the "signals". It passes the "strategy order" to the signal study via global variables to execute. I might go the other way like you are later, but I'm still in the development stage and started with the indicator study first, which was the obvious thing to do at the time. If I knew about this issue before, I probably would have started with the signal study and worked backward to the indicator study to display my lines. It works fine the way I have it now so I probably won't need to change it. At least the way I'm doing it now I only need to execute my functions once; in the indicator study. All the signal study is doing is picking up the appropriate order and sending it to IB. It does nothing else, at least for now. In fact, I could use this as a generic signal study for all my indicator studies.
- TJ
- Posts: 7743
- Joined: 29 Aug 2006
- Location: Global Citizen
- Has thanked: 1033 times
- Been thanked: 2222 times
Very interessting !
But there is one thing, i cant find out.
Is there any order how scripts are calculated.
Example:
Indicator 1 says at Bar No. 10 buy long and pass the value to a global variable: "G1"
Signal 1 watches G1 for a buy signal and will do the order.
How can i ensure, that at Bar 10 first the indicator calculate the value for G1 and then Signal 1 is processed ?
Can it happen, that Siganl 1 get the value at Bar No. 11 ?
In my second software (tradesignal) there is a definitiv order. The order depends on the order how the scripts are added to the chart. The First script is processed first, and so on. So, with the wrong order, it can happen that signal 1 gets the correct value at bar No. 11.
With the pushpop.dll i could not discover this problem.
But there is one thing, i cant find out.
Is there any order how scripts are calculated.
Example:
Indicator 1 says at Bar No. 10 buy long and pass the value to a global variable: "G1"
Signal 1 watches G1 for a buy signal and will do the order.
How can i ensure, that at Bar 10 first the indicator calculate the value for G1 and then Signal 1 is processed ?
Can it happen, that Siganl 1 get the value at Bar No. 11 ?
In my second software (tradesignal) there is a definitiv order. The order depends on the order how the scripts are added to the chart. The First script is processed first, and so on. So, with the wrong order, it can happen that signal 1 gets the correct value at bar No. 11.
With the pushpop.dll i could not discover this problem.
- TJ
- Posts: 7743
- Joined: 29 Aug 2006
- Location: Global Citizen
- Has thanked: 1033 times
- Been thanked: 2222 times
thanksIn the "Functions" folder you can see four of them each starting with GV. I don't think there's any documentation but they appear to use the same syntax as V2.2 of GlobalVariable.dll
I would like to learn more about this MC-built-in Global Variable.
but I wouldn't know which GVfunction is from MC and which is the 3rd party's... because I have already installed the 3rd party GV.
I have a list of 17 GV functions in my PLEditor.
Marina/Andrew: can you shed more light on this?
e.g. what can this GV do and how to use this GV?
.
Last edited by TJ on 24 Jul 2009, edited 5 times in total.
Through trail an error I found the best way is to place the indicator on a 5 minute chart (or whatever your preference), and the signal study on a tick chart. I find that way the orders are processed almost immediately after the indicator study has set the global variables. Sometimes there may be a slight delay due to low activity in the market.
Thanks for the idea. It reminds me of my younger days of programming in machine language using the stack pointer to share information between routines, in particular interrupt routines. It was very useful. That's another point; it would be nice if MC had a programmable interrupt or mutex interface. For example, a study could send an interrupt to trigger all other studies that are programmed to wait for it without waiting for the next tick update. Would be a nice addition to those who know how to program complex studies.
- Andrew Kirillov
- Posts: 1589
- Joined: 28 Jul 2005
- Has thanked: 2 times
- Been thanked: 31 times
- Contact: