|
0 registered members (),
5,207
guests, and 4
spiders. |
|
Key:
Admin,
Global Mod,
Mod
|
|
|
|
01/13/26 13:53
I finally resolved it. Now it connect correctly
3
58
Read More
|
|
01/12/26 09:39
OK. "camera always goes up" solved with small texture animation demo: So as a result of my research about a upwards moving camera I like to share the results with you: 1. It is correct: You need a hmp (Ground) below your level geometry to avoid an upgoing camera/player camera. Strangely enough. Note the hmp in my 3DGitt demo screenshot. 2. I created a small demo level with a Guard-player with the t_player action attached to the model. The t_player action has been modified by me so that you can hear footsteps when walking. The cube with the black and white texture animation has been created separately in WED as a simple map, saved out and loaded in the main level with >add map entity<. Because this map entity had no collision detection I put a level prefab block into the map entity to get a stop collision. The barrel has a fx_uvspeed attached, You can see it working. The lava stream at the bottom of the level, again, is a separately created block entity with a texture animation (+0lava to +9lava). It was also build as a simple mesh and then imported. To avoid falling through the lava block I placed a level primitive inside the lava block. The lava stream movement was created in PCXanim. It is not a uvspeed fx. The whole level was compiled with >create meshes< set. Script choice was "Flythrough" t_player.c modified externaly in SED for footstep sounds. Collision sound not yet implemented but planned. Project manager used to add "player parameters". T7 scripts used. You can download the small tech demo 3DGitt.cd here: 3DGitt/A8 tech demo downloadBest wishes ! NeoDumont A7 Extra Edition (Sybex) A8 Extra Edition
4
866
Read More
|
|
01/11/26 13:42
Changes: - Fixed null pointer exception in logger initialization for Zorro versions prior to 2.48 - Refactored version management: removed external version file, now using CMakeLists.txt directly - Simplified versioning scheme from 4-part to 3-part semantic versioning (MAJOR.MINOR.PATCH) - Added GitHub release workflow to build both 32-bit and 64-bit binaries with matrix strategy https://github.com/kzhdev/alpaca_zorro_plugin/releases/tag/v1.5.2
0
37
Read More
|
|
|
01/11/26 13:38
Sorry for the late response. The settings dialog appears while the strategy is running.
3
854
Read More
|
|
|
01/11/26 00:01
There is currently no built-in option or flag in Zorro to enable digit grouping (thousands separators) in the console or logs.
Zorro's output is primarily designed to be machine-readable and CSV-compatible, which is likely why this hasn't been implemented as a core feature yet.
Your best bet is to post this as a feature request in the Suggestions subforum.
1
266
Read More
|
|
|
01/10/26 23:58
You should keep WFO enabled. The goal of the MRC is to validate the out-of-sample (OOS) equity curve produced by the WFO process.
Recommended workflow:
Perform a normal [Train] of your strategy first to generate the .par files. Run MRC.c in [Test] mode. This validates if your out-of-sample results are statistically significant or just due to luck.
Running MRC.c in [Train] mode is even more rigorous as it also checks for "selection bias" (overfitting during the optimization process itself), but it is computationally very expensive and can take a long time with WFO.
1
225
Read More
|
|
|
01/10/26 23:50
You don't need to rename your files or use complex wildcards. Zorro provides a specific variable for this purpose called SymbolHist.
There are two ways to achieve this:
1. Using the script (easiest): After calling asset(), you can manually redirect the history to your specific file name by setting SymbolHist:
c asset("ES_Z"); SymbolHist = "ESeod"; // Zorro will now look for ESeod.t6 instead of ES_Z.t6
2. Using the Asset List (cleanest for many assets): In your .csv asset list, you can use a colon-separated syntax in the Symbol column (the 12th column). The format is BrokerSymbol:HistorySymbol.
For your case, set the Symbol column for that asset to: ES_Z:ESeod
Zorro will then automatically use ES_Z for all broker commands (trading) and ESeod for all history commands (loading .t6 files).
Important Note: Make sure your History variable is set to the correct extension (usually .t6 by default). If you set SymbolHist = "ESeod", Zorro will look for ESeod.t6 in your Data folder."
1
264
Read More
|
|
|
01/10/26 23:46
The default BarOffset = 940 for daily bars (BarPeriod = 1440) is an internal setting that Zorro only applies automatically if the asset is identified as a Stock (Type 1) in your asset list.
Here are the most likely reasons why you are seeing 0:
Asset Type: Check your .csv asset list. If the Type column is set to 0 (Generic/Forex) or any other value besides 1, Zorro uses the universal default of 0 (alignment at 00:00). For US stocks, ensure the Type is set to 1. Order of Execution: If you print BarOffset at the very beginning of the run function before calling asset(), it will still show the global default. The asset-specific offset is only loaded after the asset is selected. Data Source: Even if your historical data consists of minute bars, Zorro won't change the BarOffset unless the asset type specifically triggers it.
Recommendation: While Zorro aims to set these defaults, it is best practice to define the alignment explicitly in your script to avoid confusion across different brokers or asset lists:
c void run() { BarPeriod = 1440; BarOffset = 9*60 + 40; // 940: Align with US market close (15:40 ET) ... }
Note that 940 is the standard offset for US stocks because the last 1-minute bar of the session starts at 15:59 and ends at 16:00. 940 minutes after midnight is 15:40, which matches the bar timestamping logic (timestamp = bar start time).
1
176
Read More
|
|
|
01/09/26 21:12
if(Train) MaxLong = whatever, and TrainMode |= LIMITS.
1
93
Read More
|
|
01/08/26 20:03
Sorry, it was my configuration mistake. When I printed PIP, I noticed that its value was 0.01, which is wrong for GBPUSD. The reason is that I was not using Zorro’s built-in history, but instead loaded my broker’s own historical data under the symbol “GBPUSD”. However, in Zorro’s packaged history data the symbol is “GBP/USD”, and in the AssetFix list has this exact symbol. But there is no entry for “GBPUSD”. Therefore no asset parameters were found for my symbol, and Zorro apparently fell back to the default, which was PIP = 0.01. Zorro actually even warned me about this in the logs, and I overlooked: "Warning 034: GBPUSD not in asset list" However, there is still something that appears to be a bug. In my ZorroFix.ini I have:
HistoryFolder = "myHistory"
But regardless of what I put into "myHistory/AssetFix.csv", Zorro always use the file "History/AssetFix.csv". So the custom AssetFix file in the custom history folder seems to be ignored.
1
106
Read More
|
|
|
01/07/26 15:14
Looking for new games to work on!
101
57,512
Read More
|
|
|
01/07/26 13:33
A strategy DLL cannot be released after a run, since it is still needed for chart and panel functions. It is released when the source has a newer timestamp, or when you run a different strategy, or close Zorro. If you debug it with VC++, you can simply click on the "Restart" button after modifying the code. It will then automatically close Zorro, compile, and restart it with the new DLL.
1
102
Read More
|
|
|
01/07/26 07:50
Do you have any plan to implement it?
2
104
Read More
|
|
|
01/06/26 16:43
In this case yes, in other cases it's pessimistic. But we'll add a flag for that.
3
161
Read More
|
|
|
01/05/26 16:47
No, it needs not be set in the INITRUN, at least I know no reason for that. This sentence in the manual was probably a leftover from copy/paste, you can ignore it.
1
125
Read More
|
|
|
01/05/26 08:50
Theoretically yes, it should work for rules in the same way as for parameters. Try it and let us know if something does not work.
1
157
Read More
|
|
|
01/04/26 18:27
in a multiyear backtest of index components, e.g. SP500, the components change as the index gets rebalanced. the SP500 components today, is not the same as those in 2022, etc.
5
534
Read More
|
|
01/03/26 08:10
If you mean with 'right' the close of the bar, then you are right that the close is right.
2
249
Read More
|
|
|
12/31/25 21:11
I made a work-around for this that seems to be working reliably enough for me. (I consider it a convenience rather than mission-critical.)
It involves using the system() command to kick off another Zorro instance shortly after the TWS restart, and quit() to kill the original one.
My implementation is likely sub-optimal, so comments welcomed. (But, no need to lecture me about global variables.)
I am running 64-bit Zorro C++ scripts on a Windows 11 machine, with an S-level license.
The following code is pieced together from the various functions where it actually resides and hasn't been tested in this exact form, so consider it just a sketch of concept. The core commands are in the last few lines, the rest is infrastructure.
(Edit: oops, I left out showing where Last_Started_Day is written to the state file. In practice I update the state file every 15th minute based on a tod(0) check.)
-----------------------
// Globals int Last_Started_Day, UTC_offset; bool SOD_Business, SOD_Business Done, EOD_Business, EOD_Business_Done; // SOD = start of day, EOD = end of day string State_File;
DLLFUNC void main() { // Delay to ensure previous Zorro instance has ended if (is(TRADEMODE) && is(COMMAND)) { printf("10 second delay for Zorro instance handoff..."); wait(10000); }
State_File = "Data\\My_State_File.csv"; // other main() stuff....
}
DLLFUNC void run() { if (Bar == StartBar) { printf("\n"); printf("\nLoading State File..."); // Script-wide variables Last_Started_Day = (int)(getvar(State_File, "Last_Started_Day")); EOD_Business_Done = (bool)(getvar(State_File, "EOD_Business_Done"));
// other state stuff.... } // TIME ZONE OFFSET if (dst(EST,0)==1) { UTC_offset = -4; } else { UTC_offset = -5; }
start_time = 0400 - UTC_offset*100; // Daily business SOD_Business_Done = day(0) == Last_Started_Day; SOD_Business = tod(0) >= start_time && tod(0) < 2300 && !SOD_Business_Done;
if (SOD_Business) { Last_Started_Day = day(0); SOD_Business_Done = true; EOD_Business_Done = false;
// other start of day stuff ... }
int EOD_time; bool EOD_Window; if (dst(EST,0)==1) { EOD_time = 2350; EOD_Window = tod(0) >= EOD_time; } else { EOD_time = 50; EOD_Window = tod(0) >= EOD_time && tod(0) < 200; }
// TWS daily restart should be set for slightly before the EOD_time. E.g. currently I use 00:30 GMT
EOD_Business = EOD_Window && !EOD_Business_Done;
if (EOD_Business) { if (is(TRADEMODE) && Bar > StartBar && !EOD_Business_Done) { login(4); EOD_Business_Done = true; putvar(State_File, "EOD_Business_Done", (var)(EOD_Business_Done)); wait(10000); system("Zorro64.exe -trade My_Script.cpp"); quit("!Restarting Zorro session to cope with IBKR lockout."); } }
}
13
3,232
Read More
|
|
|
12/31/25 09:57
got it. The asset list must be loaded in the first run (INITRUN) of the script
1
313
Read More
|
|
|
12/29/25 09:37
"Normalized" in that case means adjusted to a 3 years average. In the case of drawdown, it is multiplied with the square root of (3 / test period in years).
1
284
Read More
|
|
|
12/29/25 03:24
No, your Zorro S expires in that case. It’s a subscription. Keep paying monthly for more Zorro S and updates.
1
268
Read More
|
|
|
12/26/25 19:14
Thank you for your kind words, you can use the ZorroGPT in order to expand the use on different timeframes or simultaneous. you are most welcome, It would be great if you share your ideas too...
22
9,839
Read More
|
|
|
12/19/25 21:02
Thanks, this will help. I am just creating a GUI for my algo trading set up with Zorro. I have to admit Antigravity helps a lot to run Zorro with a set of Python libraries.Automatic strategy development, backtesting and data analysis and much more in a very short time. But the core is Zorro, and the Zorro manual is really the Bible. M.
4
607
Read More
|
|
|