Gamestudio Links
Zorro Links
Newest Posts
MT5 bridge not working on MT5 v. 5 build 4160
by EternallyCurious. 04/25/24 20:49
Data from CSV not parsed correctly
by EternallyCurious. 04/25/24 10:20
Trading Journey
by howardR. 04/24/24 20:04
M1 Oversampling
by Petra. 04/24/24 10:34
Zorro FIX plugin - Experimental
by flink. 04/21/24 07:12
Scripts not found
by juergen_wue. 04/20/24 18:51
zorro 64bit command line support
by 7th_zorro. 04/20/24 10:06
StartWeek not working as it should
by jcl. 04/20/24 08:38
AUM Magazine
Latest Screens
The Bible Game
A psychological thriller game
SHADOW (2014)
DEAD TASTE
Who's Online Now
1 registered members (AndrewAMD), 962 guests, and 7 spiders.
Key: Admin, Global Mod, Mod
Newest Members
Mega_Rod, EternallyCurious, howardR, 11honza11, ccorrea
19048 Registered Users
Previous Thread
Next Thread
Print Thread
Rate Thread
Page 1 of 2 1 2
for(all_trades) inverse order #470605
01/24/18 11:01
01/24/18 11:01
Joined: Feb 2015
Posts: 652
Milano, Italy
M
MatPed Offline OP
User
MatPed  Offline OP
User
M

Joined: Feb 2015
Posts: 652
Milano, Italy
Hi,
has anybody found a way to browse the trades in the inverse order? Last trades first?
I need to identify the last n trades that respect some conditions.

Thank you

Re: for(all_trades) inverse order [Re: MatPed] #470606
01/24/18 13:08
01/24/18 13:08
Joined: Feb 2017
Posts: 369
D
Dalla Offline
Senior Member
Dalla  Offline
Senior Member
D

Joined: Feb 2017
Posts: 369
Depends what exectly you are after.

These arrays contain the results for the 20 most recent trades. index 0 = most recent trade.

ResultLong[0] .. ResultLong[19]
ResultShort[0] .. ResultShort[19]

More info
http://zorro-trader.com/manual/en/winloss.htm

Re: for(all_trades) inverse order [Re: Dalla] #470607
01/24/18 13:42
01/24/18 13:42
Joined: Feb 2015
Posts: 652
Milano, Italy
M
MatPed Offline OP
User
MatPed  Offline OP
User
M

Joined: Feb 2015
Posts: 652
Milano, Italy
Thank You Dalla,
that was exactly my starting point, but it did not work.
I want to calculate the Rolling Expectancy Ratio. Basically I need the Result of the last N trades the mentioned arrays does not provide such information.

the for(all_trade) macro could be used, but unfortunately its sort the trades from the first opened one. Reversing a growing array is not trivial for my coding capabilities, so I was blessing for some help laugh.

Ciao

Re: for(all_trades) inverse order [Re: MatPed] #470616
01/25/18 07:40
01/25/18 07:40
Joined: Jul 2000
Posts: 27,982
Frankfurt
jcl Offline

Chief Engineer
jcl  Offline

Chief Engineer

Joined: Jul 2000
Posts: 27,982
Frankfurt
Another macro could be defined for reverse order. Do you need it for all or only for closed trades?

Re: for(all_trades) inverse order [Re: jcl] #470617
01/25/18 09:12
01/25/18 09:12
Joined: Feb 2015
Posts: 652
Milano, Italy
M
MatPed Offline OP
User
MatPed  Offline OP
User
M

Joined: Feb 2015
Posts: 652
Milano, Italy
Thank you,
For the specific task only closed would be enough. For general purposes I guess that all trades would be better. I know that this will be an easy task for you, but when you write it can you explain of how it works?

I've tried to read the for(all_trade) macro definition but, I admit, is quite obscure to me...

Ciao

Last edited by MatPed; 01/25/18 09:17.
Re: for(all_trades) inverse order [Re: MatPed] #470618
01/25/18 10:29
01/25/18 10:29
Joined: Jul 2000
Posts: 27,982
Frankfurt
jcl Offline

Chief Engineer
jcl  Offline

Chief Engineer

Joined: Jul 2000
Posts: 27,982
Frankfurt
Ok, try this: get the latest version 1.74.8 and use for(closed_trades). It is undocumented, but is supposed to enumerate closed trades in backwards order. For aborting the loop, as you probably don't want to go through all trades, use break_trades; instead of break;.

Re: for(all_trades) inverse order [Re: jcl] #470624
01/25/18 11:23
01/25/18 11:23
Joined: Feb 2015
Posts: 652
Milano, Italy
M
MatPed Offline OP
User
MatPed  Offline OP
User
M

Joined: Feb 2015
Posts: 652
Milano, Italy
ok, thank you. I guess that The code inside the loop has access to all trade variables. Am I right?

Re: for(all_trades) inverse order [Re: MatPed] #470626
01/25/18 13:51
01/25/18 13:51
Joined: Jul 2017
Posts: 784
Z
Zheka Offline
User
Zheka  Offline
User
Z

Joined: Jul 2017
Posts: 784
laugh
- Zorro seems to maintain one single list of all trades in a portfolio.
Will it make sense to add a field to Trade struct with a pointer to the previous trade of the same algo/asset component?
Then traversing such a linked list backwards for a component would be quicker, and such backwards looping is mostly needed for a component, not the full portfolio.
- break_trades for some reason does not work; break- does

It would really help if Zorro exposed a variable/pointer to the last closed trade of the current asset/algo combination (without asking a user to go into the for(trades)loop.
Or is there a way?

Re: for(all_trades) inverse order [Re: Zheka] #470638
01/26/18 08:42
01/26/18 08:42
Joined: Feb 2015
Posts: 652
Milano, Italy
M
MatPed Offline OP
User
MatPed  Offline OP
User
M

Joined: Feb 2015
Posts: 652
Milano, Italy
Hi Zheka,
I am fine with the For() approach I can filter and selecting the trades I need.
Did you already tried for(closed_trades)with version 1.78 and discovered a bug using break_trades ?

I guess that a specific exit from the loop is required in order to proper reset pointers and other stuff or the following for(closed_trades) will not work properly.

Please report your findings.

Thank You

Re: for(all_trades) inverse order [Re: MatPed] #470639
01/26/18 09:57
01/26/18 09:57
Joined: Jul 2017
Posts: 784
Z
Zheka Offline
User
Zheka  Offline
User
Z

Joined: Jul 2017
Posts: 784
Hi, MatPed,

Suggestion to extend a Trade struct was to improve speed and flexibility of looping - both internally by Zorro and/or for a user; with or without a for()macro.

Quote:
Did you already tried for(closed_trades)with version 1.78 and discovered a bug using break_trades ?
Yes, I did. A simple for(closed_trades)loop with a counter to print details of last 20 trades only printed for 1 trade with break_trades and all 20 with a normal break.
If more complex scenaria would work properly with a normal "break" - I did not test.

Re: for(all_trades) inverse order [Re: Zheka] #470640
01/26/18 09:59
01/26/18 09:59
Joined: Feb 2015
Posts: 652
Milano, Italy
M
MatPed Offline OP
User
MatPed  Offline OP
User
M

Joined: Feb 2015
Posts: 652
Milano, Italy
Thank you.
Can you post the coded used for the test?

Ciao

Re: for(all_trades) inverse order [Re: MatPed] #470641
01/26/18 11:23
01/26/18 11:23
Joined: Jul 2017
Posts: 784
Z
Zheka Offline
User
Zheka  Offline
User
Z

Joined: Jul 2017
Posts: 784
Here it is.
Quote:
if (is(EXITRUN))
{
int ii=0;
for(closed_trades)
{
ii++;
printf("# Asset: %s, Algo=%s, Trade Profit=%f, ii=%i",TradeAsset,TradeAlgo, TradeProfit,ii);

if (ii>20) break_trades;
}
}

Re: for(all_trades) inverse order [Re: Zheka] #470643
01/26/18 14:46
01/26/18 14:46
Joined: Jul 2000
Posts: 27,982
Frankfurt
jcl Offline

Chief Engineer
jcl  Offline

Chief Engineer

Joined: Jul 2000
Posts: 27,982
Frankfurt
For the moment, better use

if(ii>20) { break_trades; }

Re: for(all_trades) inverse order [Re: jcl] #470675
01/29/18 23:39
01/29/18 23:39
Joined: Feb 2015
Posts: 652
Milano, Italy
M
MatPed Offline OP
User
MatPed  Offline OP
User
M

Joined: Feb 2015
Posts: 652
Milano, Italy
Hi,
trying to build up an array with trade results for further calculation. My understanding is that I have to filter by Algo/Asset the trades in the loop. This is the code:

Code:
#define MaxRolling 50
var rer(int ii){
// rolling expectancy ratio: ((AvgWin / AvgLoss) * WinRate) – (1 – WinRate)

	bool debug = TRUE;
	var resultAA[MaxRolling];
	int i=0; for (i=0; i<MaxRolling; i++) resultAA[i] = 0; // Init the Array

	string myAsset = Asset;
	string myAlgo = Algo;
	i=0;
	for(closed_trades) {
		if( TradeIsPhantom &&  myAsset==TradeAsset && myAlgo==TradeAlgo) {
			resultAA[i] = TradeProfit/TradeUnits/PIP;
			if(debug) {
				print(TO_ANY, "n Asset: %s - ALGO: %s - #Trades: %d - PIP: %.2f", Asset, Algo, i, resultAA[i]);	
			}
			i++;	
			if (i >= ii) {break_trades;}
		}
}
	return .0;
}



nothing happens. Trade results ar printed if the last condition in the IF statement is removed. I do not understand what I am missing.

Thank you

Re: for(all_trades) inverse order [Re: MatPed] #470677
01/30/18 03:50
01/30/18 03:50
Joined: Feb 2017
Posts: 369
D
Dalla Offline
Senior Member
Dalla  Offline
Senior Member
D

Joined: Feb 2017
Posts: 369
Hmm, I'm thinking that bool is case sensitive perhaps?
Try
bool debug = true;

Re: for(all_trades) inverse order [Re: Dalla] #470679
01/30/18 07:47
01/30/18 07:47
Joined: Feb 2015
Posts: 652
Milano, Italy
M
MatPed Offline OP
User
MatPed  Offline OP
User
M

Joined: Feb 2015
Posts: 652
Milano, Italy
Nice try Dalla laugh but it does not change the behavior o the script.
the weird things is that the the error seems to be
&& myAlgo==TradeAlgo
if removed the array is printed.

by the way, I am calling the rer function just before of the enter command in workshop 6, for test purposes
Ciao

Last edited by MatPed; 01/30/18 07:50.
Re: for(all_trades) inverse order [Re: MatPed] #470681
01/30/18 10:11
01/30/18 10:11
Joined: Feb 2017
Posts: 369
D
Dalla Offline
Senior Member
Dalla  Offline
Senior Member
D

Joined: Feb 2017
Posts: 369
OK, instead of doing
Code:
myAlgo==TradeAlgo


try
Code:
strstr(myAlgo,TradeAlgo)



You should probably do this for TradeAsset as well.
Comparing strings with == and != is usually not a good idea.

Last edited by Dalla; 01/30/18 10:13.
Re: for(all_trades) inverse order [Re: MatPed] #470682
01/30/18 10:15
01/30/18 10:15
Joined: Jul 2017
Posts: 784
Z
Zheka Offline
User
Zheka  Offline
User
Z

Joined: Jul 2017
Posts: 784
This is because "strings" are elusive animals (constants?):-)

This works:

char* myAsset[16]; myAsset =strcpy(myAsset,Asset);
char* myAlgo[16]; myAlgo = strcpy(myAlgo,Algo);
....
if( !strcmp(myAsset,TradeAsset) && !strcmp(myAlgo,TradeAlgo))


Dalla's suggestion also works.

Last edited by Zheka; 01/30/18 10:22.
Re: for(all_trades) inverse order [Re: Zheka] #470684
01/30/18 11:08
01/30/18 11:08
Joined: Feb 2015
Posts: 652
Milano, Italy
M
MatPed Offline OP
User
MatPed  Offline OP
User
M

Joined: Feb 2015
Posts: 652
Milano, Italy
Dalla, Zheka. You are my heroes! Thank you

Page 1 of 2 1 2

Moderated by  Petra 

Gamestudio download | chip programmers | Zorro platform | shop | Data Protection Policy

oP group Germany GmbH | Birkenstr. 25-27 | 63549 Ronneburg / Germany | info (at) opgroup.de

Powered by UBB.threads™ PHP Forum Software 7.7.1