forex software

Create and Test Forex Strategies

forex software

Skip to forum content

Forex Software

Create and Test Forex Strategies

You are not logged in. Please login or register.


(Page 2 of 4)

Forex Software → Express Generator → Express Generator - Wish List

Pages Previous 1 2 3 4 Next

You must login or register to post a reply

RSS topic feed

Posts: 26 to 50 of 85

Re: Express Generator - Wish List

Hi Popov,

I have a feature request.

For the new validate-then-generate command it would be great if there was a switch that could allow me to delete the files read into express gen as they will be included in the collection when it finishes.

Right now if i read in a collection file with say 58 EAs then when express gen finishes i just get and additional collection file with the original 58 included and any extra generated. This would make it easier to keep my files tidy :-)

Re: Express Generator - Wish List

>  when express gen finishes i just get and additional collection file with the original 58 included and any extra generated.

Did you try to have the same file name for the input and the output collection?

You can prevent adding suffixes to the output file with output-replace = true.

Please see this example: Revalidate and Expand a Collection

Re: Express Generator - Wish List

Ah that’s a good point Popov, I have the number of strategies in the file name which changes it but if I make it a generic name that would be the same everytime and use this switch then it will rename it how I want.

Cheers

Re: Express Generator - Wish List

Hi,

Is it possible to add to the Monte Carlo settings the ability to randomize indicator parameters? 
Example: "rand_indicator_param = 20" would randomize the indicator parameters up or down 20%.


Is it also possible to allow a test percent passed less than 100% settings?
example "percent-pass-allowed  = 80" would require 80% of the strategies to pass mc settings to be placed into the collection.
Currently, on the first fail, it discards the strategy. Having this variable at less than 100 would require it to continue going until the "number_of_tests" variable has been reached.

Re: Express Generator - Wish List

> Is it also possible to allow a test percent passed less than 100% settings?

Added in Express Generator v2.10

Re: Express Generator - Wish List

At EAS, I have an influence on the number and quality of the strategies via the "Entry Time" and "Exit Time" indicators.

I would also like to see such a function in Express Generator.

Example:

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Trading Session          ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

session_open_from_hour    = 00:00
session_open_from_minute  = 00:00
session_open_until_hour   = 14:00
session_open_until_minute = 00:00

session_close_from_hour    = 23:00
session_close_from_minute  = 00:00
session_close_until_hour   = 24:00
session_close_until_minute = 00:00

friday_close  = 22:00

trade_on_sunday = false

close_at_session_close = true
close_at_friday_close  = true

Re: Express Generator - Wish List

Is it applicable to modify ;; Indicators used by the Generator ;; in gen.settings  into two groups one for open and the other for close

Regards

33 (edited by geektrader 2022-11-28 02:06:59)

Re: Express Generator - Wish List

Hi Mr. Popov,

here are 2 requests for further ease of handling of EG.

1) Express Generator should automatically create the output folder specified in the "output =" variable if it doesn´t exist yet. Currently, it simply skips saving the strategies if the output folder does not exist.

2) Please allow double usage of variables for the "output =" variable. Right now, if for example using

output = ./collections/[SYMBOL]/[PERIOD]/[SYMBOL]_[PERIOD]_[YEAR]-[MONTH]-[DAY]_str_[COUNT].json

The result is that it correctly puts it into the subfolders, but the strategy file names are

[SYMBOL]_[PERIOD]_2019-11-23_str_1_(3).json

It looks like any variable like [SYMBOL] can only be used once in the "output =" and if it´s used a second time (for the directory *AND* for the filename), it´s saved as "[SYMBOL]" instead, without that this variable replaces it with the current symbol like GBPJPY like it should do.

Thank you.

Re: Express Generator - Wish List

These are valuable ideas.

Thank you!

...

Edit:

Implemented in Express Generator v2.11

Re: Express Generator - Wish List

Hi Mr Popov
Happy xmas and hope you have a great new year!

It would be amazing if Express Generator were able to take the collection generated and optionally output it as a Portfolio Expert, with the top n number of strategies.

;; Output Portfolio
output_ea        = true
output_format    = mt5
output_dir       = ./portfolios
output_top       = 50

Do you think that's possible to do?
Thanks
Tim

Re: Express Generator - Wish List

Another suggestion for you Mr Popov,

I'd like to be able to generate strategies that have a minimum number of entry (and possibly exit) indicators in them.  Currently we set a max for indicators, and it may or may not develop strategies that have, say 4 indicators.

By having a minimum number of indicators as entry, they would all need to be suggesting the same signal (buy or sell) which provides a good level of confirmation that the signal is correct.

; Min number of indicators to use (use 0 if not required)
min_entry_slots       = 4
min_exit_slots        = 2

So, in the above example, it would require 4 signals confirming to enter a trade, and 2 signals to exit the trade.

Thanks
Tim

Re: Express Generator - Wish List

> min_entry_slots 4

It would set 3 meaningless "RSI > 0" and then will set the only needed indicator. It is not what you would expect.

Re: Express Generator - Wish List

>It would be amazing if Express Generator were able to take the collection generated and optionally output it as a Portfolio Expert

Express Generator is designed to generate collections of strategies for further review in FSB Pro or EA Studio.

Only FSB Pro and EA Studio can generate and export MQL code.

39 (edited by timelleston 2023-01-22 23:21:51)

Re: Express Generator - Wish List

Hi Mr Popov,
Just wondering if there's any way to generate more "consistency" across strategies in Exp.Gen...difficult to explain, but hopefully the case in point below will help.

I assume it's starting with some kind of random number to begin generating strategies, and so my case in point:
I launched 10 Exp.Gen's simultaneously (scripted so admittedly a minor delay between each launch) on the same 1H CADJPY dataset using the same parameters, running the generation for 45 minutes.

I then uploaded the dataset, and the individual collections into EAS, exported a portfolio for each collection and forward tested it in MT5 for 96 bars, starting 1 bar after the final bar from the dataset (so, dataset was 09:00 GMT, Portfolio EA launched at 10:00 GMT).

The results were actually quite dramatically different:

    Profit    Win Rate    Avg Profit    Avg Loss
0    321.69    54.84%    13.28    4.64
1    206.68    52.17%    12.71    4.47
2    138.81    43.08%    11.63    5.05
3    267.21    43.08%    14.34    3.63
4    278.54    49.30%    12.59    4.5
5    200.24    50.72%    10.01    4.42
6    268.91    52.83%    13.62    4.5
7    300.49    62.79%    13.86    4.62
8    171.95    40.30%    12.27    3.98
9    160.01    53.85%      7.27    4.03
*    472.85    47.52%    14.81    4.49 (merged using Exp.Gen)
*    783.38    52.88%    18.84    5.16 (merged using EAS Validator)
*    337.47    46.07%    13.62    4.6 (single generation)

TP was fixed at 150, SL at 25, 360 bars of data, and using Reverse direction, lot size of 0.02.  Also using M/Carlo (same settings as generation)...happy to share my settings file.  0-9 were all generated simultaneously.

There's quite a big difference across all metrics for the various portfolios.  They all started at basically the same time, and each had about 20million calculations.

I re-ran for a couple of other dates and the same thing occurred.

So I just wondered if there's a way we can create "more" consistency across the generation process...these seem pretty random and therefore results would be more luck than anything else?  I understand the randomness of things, and the volume of permutations and combinations of things, etc.

Couple of my own thoughts/questions...is it better to have one process running to generate strategies - on my computer it seems to be able to go through about 55million calculations in 45 minutes for a single collection, versus about 20million x 10 for multiple collections.  Given I'm using 0.98 on correlation threshold, on a single collection, it probably works quite well...not so sure about the re-validation/merging of multiple collections...

Does the re-validation (or merging) using Exp.Gen do the same thing in EAS?  If so, I wonder why the results between those two would be so different ($472 vs $783).

Anyway, just curious on your (and others) thoughts on this.

Thanks

40 (edited by Matthew Roberts 2023-02-15 14:59:52)

Re: Express Generator - Wish List

Hi Popov,

I'd love to see a portfolio function in EA studio.
My workflow is set up to have 26 different windows open.

Currently I'm having to test 1 collection at a time in EA Studio. There is however a problem, it's on H1 and I want to run for 2 weeks at a time per window for an entire year of data. (240 bars) 300 minimum in EA studio.

This is very time-consuming to get the data I'm desiring.
If there was a portfolio function in Express Generator, it would solve all my problems.
This would change from a day or two of testing to a click of a button per currency.

Having this portfolio function I think is the key to testing out if a method of generating strategies works well in the long run.

example
week 1 & 2 made -$100.00
week 3 & 4 made +$200.00
week 5 & 6 made +$300.00
...
...
...
Week 51 & 52 made +$500

Add up the totals for the currency to see if this method of generating strategies is profitable for an entire year.

This would allow the trader to make a more educated decision on their method of generating strategies.

Re: Express Generator - Wish List

Another feature request:

I'd like to see preset indicators aloud in the express generator.

For example, Entry Time.

I've found a way to limit the trading sessions in the expert advisor studio and use the entry time indicator to enter just before a stock opening and catch the market spike with pretty consistently profitable monthly results. If preset indicators were available in the express generator, I'd be able to make a preset file to generate these strategies in minutes versus the hours it's taking with EA Studio.

Re: Express Generator - Wish List

Hi Popov,

Would it be possible to increase the number of bars of premium data that can be downloaded (300k would be ideal). its capped at 200k and this can be a bit limiting for my existing M5 and M15 workflows.

Cheers :-)

43 (edited by Roughey 2023-07-24 22:07:16)

Re: Express Generator - Wish List

Create a dapp to make the the setting file easier to edit. Maybe for example we can set all the settings in eastudio export them and use in EG.

When it is not compatible maybe it will be great to have a website dapp or seomthing to change the settings in a GUI and export them. That will be great

LOL just ask GPT if he can do it ::

Maybe someone can use it or maybe popov can improve it and put in on webserver :-)

<!DOCTYPE html>
<html>
<head>
    <title>INI Settings Editor</title>
    <style>
        body {
            font-family: Arial, sans-serif;
        }
        .section {
            border: 1px solid #ccc;
            padding: 10px;
            margin-bottom: 10px;
        }
        label {
            display: inline-block;
            width: 200px;
        }
        input[type="text"],
        input[type="number"],
        select {
            width: 300px;
        }
        button {
            margin-top: 10px;
            padding: 8px 16px;
            background-color: #007BFF;
            color: #fff;
            border: none;
            cursor: pointer;
        }
    </style>
</head>
<body>
    <h1>INI Settings Editor</h1>

    <div class="section">
        <h2>Data Source</h2>
        <label>Server:</label>
        <input type="text" id="server">
        <br>
        <label>Symbol:</label>
        <input type="text" id="symbol">
        <br>
        <label>Period:</label>
        <input type="text" id="period">
        <br>
        <label>Data File:</label>
        <input type="text" id="dataFile">
    </div>

    <div class="section">
        <h2>Input and Output</h2>
        <label>Input:</label>
        <input type="text" id="input">
        <br>
        <label>Output:</label>
        <input type="text" id="output">
        <br>
        <label>Output Replace:</label>
        <select id="outputReplace">
            <option value="false">False</option>
            <option value="true">True</option>
        </select>
        <br>
        <label>Validate Then Generate:</label>
        <select id="validateThenGenerate">
            <option value="false">False</option>
            <option value="true">True</option>
        </select>
    </div>

    <div class="section">
        <h2>Collection</h2>
        <label>Collection Capacity:</label>
        <input type="number" id="collectionCapacity">
        <br>
        <label>Sort By:</label>
        <select id="sortBy">
            <option value="NetBalance">NetBalance</option>
            <option value="Profit">Profit</option>
            <option value="ProfitFactor">ProfitFactor</option>
            <option value="ReturnToDrawdown">ReturnToDrawdown</option>
            <option value="RSquared">RSquared</option>
            <option value="Stagnation">Stagnation</option>
            <option value="WinLossRatio">WinLossRatio</option>
        </select>
        <br>
        <label>Correlation Threshold:</label>
        <input type="number" step="0.01" id="correlationThreshold">
        <br>
        <label>Resolve Correlation:</label>
        <select id="resolveCorrelation">
            <option value="false">False</option>
            <option value="true">True</option>
        </select>
        <br>
        <label>Resolve Similar Rules:</label>
        <select id="resolveSimilarRules">
            <option value="false">False</option>
            <option value="true">True</option>
        </select>
    </div>

    <div class="section">
        <h2>Generator Stop</h2>
        <label>Max Ascended Strategies:</label>
        <input type="number" id="maxAscendedStrategies">
        <br>
        <label>Max Calculated Strategies:</label>
        <input type="number" id="maxCalculatedStrategies">
        <br>
        <label>Max Working Minutes:</label>
        <input type="number" id="maxWorkingMinutes">
    </div>

    <div class="section">
        <h2>Acceptance Criteria</h2>
        <label>Max Consecutive Losses:</label>
        <input type="number" id="maxConsecutiveLosses">
        <br>
        <label>Max Drawdown Percent:</label>
        <input type="number" step="0.01" id="maxDrawdownPercent">
        <br>
        <label>Max Equity Drawdown:</label>
        <input type="number" step="0.01" id="maxEquityDrawdown">
        <br>
        <label>Max Stagnation Days:</label>
        <input type="number" id="maxStagnationDays">
        <br>
        <label>Max Stagnation Percent:</label>
        <input type="number" step="0.01" id="maxStagnationPercent">
        <br>
        <label>Min Count of Trades:</label>
        <input type="number" id="minCountOfTrades">
        <br>
        <label>Min Profit:</label>
        <input type="number" id="minProfit">
        <br>
        <label>Min Profit Factor:</label>
        <input type="number" step="0.01" id="minProfitFactor">
        <br>
        <label>Min Profit Per Day:</label>
        <input type="number" step="0.01" id="minProfitPerDay">
        <br>
        <label>Min R-Squared:</label>
        <input type="number" step="0.01" id="minRSquared">
        <br>
        <label>Min Return to Drawdown:</label>
        <input type="number" step="0.01" id="minReturnToDrawdown">
        <br>
        <label>Min Win Loss Ratio:</label>
        <input type="number" id="minWinLossRatio">
    </div>

    <div class="section">
        <h2>Account Settings</h2>
        <label>Account Currency:</label>
        <input type="text" id="accountCurrency">
        <br>
        <label>Initial Account:</label>
        <input type="number" id="initialAccount">
        <br>
        <label>Leverage:</label>
        <input type="number" id="leverage">
    </div>

    <div class="section">
        <h2>Strategy Properties</h2>
        <label>Entry Lots:</label>
        <input type="number" step="0.01" id="entryLots">
        <br>
        <label>Trade Direction Mode:</label>
        <select id="tradeDirectionMode">
            <option value="LongAndShort">LongAndShort</option>
            <option value="LongOnly">LongOnly</option>
        </select>
        <br>
        <label>Opposite Entry Signal:</label>
        <select id="oppositeEntrySignal">
            <option value="Ignore">Ignore</option>
            <option value="Reverse">Reverse</option>
            <option value="IgnoreOrReverse">IgnoreOrReverse</option>
        </select>
        <br>
        <label>Stop Loss Usage:</label>
        <select id="stopLossUsage">
            <option value="AlwaysUse">AlwaysUse</option>
            <option value="MayUse">MayUse</option>
            <option value="DoNotUse">DoNotUse</option>
        </select>
        <br>
        <label>Stop Loss Type:</label>
        <select id="stopLossType">
            <option value="Fixed">Fixed</option>
            <option value="Trailing">Trailing</option>
            <option value="FixedOrTrailing">FixedOrTrailing</option>
        </select>
        <br>
        <label>Stop Loss Range Min:</label>
        <input type="number" id="stopLossRangeMin">
        <br>
        <label>Stop Loss Range Max:</label>
        <input type="number" id="stopLossRangeMax">
        <br>
        <label>Take Profit Usage:</label>
        <select id="takeProfitUsage">
            <option value="AlwaysUse">AlwaysUse</option>
            <option value="MayUse">MayUse</option>
            <option value="DoNotUse">DoNotUse</option>
        </select>
        <br>
        <label>Take Profit Range Min:</label>
        <input type="number" id="takeProfitRangeMin">
        <br>
        <label>Take Profit Range Max:</label>
        <input type="number" id="takeProfitRangeMax">
        <br>
        <label>Max Entry Slots:</label>
        <input type="number" id="maxEntrySlots">
        <br>
        <label>Max Exit Slots:</label>
        <input type="number" id="maxExitSlots">
    </div>

    <div class="section">
        <h2>Backtester</h2>
        <label>Exit Trade At:</label>
        <select id="exitTradeAt">
            <option value="Open">Open</option>
            <option value="Close">Close</option>
        </select>
        <br>
        <label>Close at Backtest End:</label>
        <select id="closeAtBacktestEnd">
            <option value="false">False</option>
            <option value="true">True</option>
        </select>
    </div>

    <div class="section">
        <h2>Data Horizon</h2>
        <label>Max Data Bars:</label>
        <input type="number" id="maxDataBars">
        <br>
        <label>Use Data Start:</label>
        <select id="useDataStart">
            <option value="false">False</option>
            <option value="true">True</option>
        </select>
        <br>
        <label>Data Start:</label>
        <input type="text" id="dataStart">
        <br>
        <label>Use Data End:</label>
        <select id="useDataEnd">
            <option value="false">False</option>
            <option value="true">True</option>
        </select>
        <br>
        <label>Data End:</label>
        <input type="text" id="dataEnd">
    </div>

    <div class="section">
        <h2>Out of Sample</h2>
        <label>Data Start Percent:</label>
        <input type="number" step="0.01" id="dataStartPercent">
        <br>
        <label>Data End Percent:</label>
        <input type="number" step="0.01" id="dataEndPercent">
    </div>

    <div class="section">
        <h2>Trading Session</h2>
        <label>Session Open:</label>
        <input type="text" id="sessionOpen">
        <br>
        <label>Session Close:</label>
        <input type="text" id="sessionClose">
        <br>
        <label>Friday Close:</label>
        <input type="text" id="fridayClose">
        <br>
        <label>Trade on Sunday:</label>
        <select id="tradeOnSunday">
            <option value="false">False</option>
            <option value="true">True</option>
        </select>
        <br>
        <label>Close at Session Close:</label>
        <select id="closeAtSessionClose">
            <option value="false">False</option>
            <option value="true">True</option>
        </select>
        <br>
        <label>Close at Friday Close:</label>
        <select id="closeAtFridayClose">
            <option value="false">False</option>
            <option value="true">True</option>
        </select>
    </div>

    <div class="section">
        <h2>Symbol Info</h2>
        <label>Spread:</label>
        <input type="number" id="spread">
        <br>
        <label>Swap Long:</label>
        <input type="text" id="swapLong">
        <br>
        <label>Swap Short:</label>
        <input type="text" id="swapShort">
        <br>
        <label>Commission:</label>
        <input type="text" id="commission">
    </div>

    <div class="section">
        <h2>Miscellaneous</h2>
        <label>Update Best:</label>
        <select id="updateBest">
            <option value="false">False</option>
            <option value="true">True</option>
        </select>
        <br>
        <label>Show Top:</label>
        <input type="number" id="showTop">
    </div>

    <div class="section">
        <h2>Indicators used by the Generator</h2>
        <label>Accelerator Oscillator:</label>
        <input type="checkbox" id="indAcceleratorOscillator" checked>
        <br>
        <label>Accumulation Distribution:</label>
        <input type="checkbox" id="indAccumulationDistribution" checked>
        <br>
        <label>ADX:</label>
        <input type="checkbox" id="indAdx" checked>
        <br>
        <label>Alligator:</label>
        <input type="checkbox" id="indAlligator" checked>
        <br>
        <label>Average True Range:</label>
        <input type="checkbox" id="indAverageTrueRange" checked>
        <br>
        <label>Awesome Oscillator:</label>
        <input type="checkbox" id="indAwesomeOscillator" checked>
        <br>
        <label>Bears Power:</label>
        <input type="checkbox" id="indBearsPower">
        <br>
        <label>Bollinger Bands:</label>
        <input type="checkbox" id="indBollingerBands" checked>
        <br>
        <label>Bulls Power:</label>
        <input type="checkbox" id="indBullsPower">
        <br>
        <label>Candle Color:</label>
        <input type="checkbox" id="indCandleColor" checked>
        <br>
        <label>Commodity Channel Index:</label>
        <input type="checkbox" id="indCommodityChannelIndex" checked>
        <br>
        <label>Demarker:</label>
        <input type="checkbox" id="indDemarker" checked>
        <br>
        <label>Directional Indicators:</label>
        <input type="checkbox" id="indDirectionalIndicators" checked>
        <br>
        <label>Do Not Exit:</label>
        <input type="checkbox" id="indDoNotExit">
        <br>
        <label>Donchian Channel:</label>
        <input type="checkbox" id="indDonchianChannel">
        <br>
        <label>Entry Time:</label>
        <input type="checkbox" id="indEntryTime">
        <br>
        <label>Envelopes:</label>
        <input type="checkbox" id="indEnvelopes" checked>
        <br>
        <label>Exit Time:</label>
        <input type="checkbox" id="indExitTime">
        <br>
        <label>Force Index:</label>
        <input type="checkbox" id="indForceIndex">
        <br>
        <label>Long or Short:</label>
        <input type="checkbox" id="indLongOrShort">
        <br>
        <label>MACD:</label>
        <input type="checkbox" id="indMacd">
        <br>
        <label>MACD Signal:</label>
        <input type="checkbox" id="indMacdSignal">
        <br>
        <label>Momentum:</label>
        <input type="checkbox" id="indMomentum" checked>
        <br>
        <label>Money Flow Index:</label>
        <input type="checkbox" id="indMoneyFlowIndex">
        <br>
        <label>Moving Average:</label>
        <input type="checkbox" id="indMovingAverage" checked>
        <br>
        <label>Moving Average of Oscillator:</label>
        <input type="checkbox" id="indMovingAverageOfOscillator">
        <br>
        <label>Moving Averages Crossover:</label>
        <input type="checkbox" id="indMovingAveragesCrossover" checked>
        <br>
        <label>On Balance Volume:</label>
        <input type="checkbox" id="indOnBalanceVolume">
        <br>
        <label>Pin Bar:</label>
        <input type="checkbox" id="indPinBar" checked>
        <br>
        <label>RSI:</label>
        <input type="checkbox" id="indRsi" checked>
        <br>
        <label>RVI:</label>
        <input type="checkbox" id="indRvi">
        <br>
        <label>RVI Signal:</label>
        <input type="checkbox" id="indRviSignal">
        <br>
        <label>Standard Deviation:</label>
        <input type="checkbox" id="indStandardDeviation" checked>
        <br>
        <label>Stochastic:</label>
        <input type="checkbox" id="indStochastic" checked>
        <br>
        <label>Stochastic Signal:</label>
        <input type="checkbox" id="indStochasticSignal" checked>
        <br>
        <label>Volumes:</label>
        <input type="checkbox" id="indVolumes">
        <br>
        <label>Williams Percent Range:</label>
        <input type="checkbox" id="indWilliamsPercentRange" checked>
    </div>

    <div class="section">
      <h2>Indicator options</h2>
      <label for="randomizeMaMethod">Randomize Moving Average Methods:</label>
      <input type="checkbox" id="randomizeMaMethod" checked><br>

      <label for="maxIndicatorPeriod">Maximum period generated by the Generator:</label>
      <input type="number" id="maxIndicatorPeriod" value="50"><br>

      <label for="randomizeMaShift">Shift of the Moving Average indicator:</label>
      <input type="checkbox" id="randomizeMaShift" checked><br>
    </div>


    <div class="section">
        <h2>Auto-save collection</h2>
        <label for="autoSaveAtMinutes">Save the collection at a particular interval in minutes:</label>
        <input type="number" id="autoSaveAtMinutes" value="120"><br>

        <label for="autoSaveAtCollected">Save the collection when it reaches the given count:</label>
        <input type="number" id="autoSaveAtCollected" value="0"><br>
    </div>

    <div class="section">
        <h2>Optimizer</h2>
        <label for="enableOptimizer">Enable Optimizer:</label>
        <select id="enableOptimizer">
            <option value="false">False</option>
            <option value="true">True</option>
        </select><br>

        <label for="numericValuesSteps">Numeric Values Steps:</label>
        <input type="number" id="numericValuesSteps" value="20"><br>

        <label for="optimizeProtections">Optimize Protections:</label>
        <select id="optimizeProtections">
            <option value="false">False</option>
            <option value="true">True</option>
        </select><br>

        <label for="optimizeBy">Search best strategy by:</label>
        <select id="optimizeBy">
            <option value="NetBalance">NetBalance</option>
            <option value="Profit">Profit</option>
            <option value="ProfitFactor">ProfitFactor</option>
            <option value="ReturnToDrawdown">ReturnToDrawdown</option>
            <option value="RSquared">RSquared</option>
            <option value="Stagnation">Stagnation</option>
            <option value="WinLossRatio">WinLossRatio</option>
        </select><br>
    </div>

   <div class="section">
        <h2>Monte Carlo</h2>
        <label for="enableMonteCarlo">Enable Monte Carlo:</label>
        <select id="enableMonteCarlo">
            <option value="false">False</option>
            <option value="true">True</option>
        </select><br>

        <label for="countOfTests">Count of Tests:</label>
        <input type="number" id="countOfTests" value="20"><br>

        <label for="validTestsPercent">Valid Tests Percent:</label>
        <input type="number" id="validTestsPercent" value="80"><br>

        <label for="spreadMax">Spread Max:</label>
        <input type="number" id="spreadMax" value="30"><br>

        <label for="slippageMax">Slippage Max:</label>
        <input type="number" id="slippageMax" value="20"><br>

        <label for="skipEntriesPercent">Skip Entries Percent:</label>
        <input type="number" id="skipEntriesPercent" value="2"><br>

        <label for="skipExitsPercent">Skip Exits Percent:</label>
        <input type="number" id="skipExitsPercent" value="2"><br>

        <label for="randClosePercent">Random Close Percent:</label>
        <input type="number" id="randClosePercent" value="0"><br>

        <label for="indParamsChangeProbability">Indicator Parameters Change Probability:</label>
        <input type="number" id="indParamsChangeProbability" value="0"><br>

        <label for="indParamsMaxChangePercent">Indicator Parameters Max Change Percent:</label>
        <input type="number" id="indParamsMaxChangePercent" value="20"><br>

        <label for="indParamsMinDeltaSteps">Indicator Parameters Min Delta Steps:</label>
        <input type="number" id="indParamsMinDeltaSteps" value="20"><br>

        <label for="randFirstBarPercent">Random First Bar Percent:</label>
        <input type="number" id="randFirstBarPercent" value="10"><br>

        <label for="mcMaxConsecutiveLosses">MC Max Consecutive Losses:</label>
        <input type="number" id="mcMaxConsecutiveLosses" value="0"><br>

        <label for="mcMaxDrawdownPercent">MC Max Drawdown Percent:</label>
        <input type="number" id="mcMaxDrawdownPercent" value="0"><br>

        <label for="mcMaxEquityDrawdown">MC Max Equity Drawdown:</label>
        <input type="number" id="mcMaxEquityDrawdown" value="0"><br>

        <label for="mcMaxStagnationDays">MC Max Stagnation Days:</label>
        <input type="number" id="mcMaxStagnationDays" value="0"><br>

        <label for="mcMaxStagnationPercent">MC Max Stagnation Percent:</label>
        <input type="number" id="mcMaxStagnationPercent" value="0"><br>

        <label for="mcMinCountOfTrades">MC Min Count of Trades:</label>
        <input type="number" id="mcMinCountOfTrades" value="100"><br>

        <label for="mcMinProfit">MC Min Profit:</label>
        <input type="number" id="mcMinProfit" value="10"><br>

        <label for="mcMinProfitFactor">MC Min Profit Factor:</label>
        <input type="number" id="mcMinProfitFactor" value="0"><br>

        <label for="mcMinProfitPerDay">MC Min Profit Per Day:</label>
        <input type="number" id="mcMinProfitPerDay" value="0"><br>

        <label for="mcMinRSquared">MC Min R-Squared:</label>
        <input type="number" id="mcMinRSquared" value="0"><br>

        <label for="mcMinReturnToDrawdown">MC Min Return-to-Drawdown:</label>
        <input type="number" id="mcMinReturnToDrawdown" value="0"><br>

        <label for="mcMinWinLossRatio">MC Min Win Loss Ratio:</label>
        <input type="number" id="mcMinWinLossRatio" value="0"><br>
    </div>

  <button onclick="exportINI()">Export INI Settings</button>

    <script>
        function exportINI() {
            const settings = {
                'Data Source': {
                    server: document.getElementById('server').value,
                    symbol: document.getElementById('symbol').value,
                    period: document.getElementById('period').value,
                    data_file: document.getElementById('dataFile').value
                },
                'Input and Output': {
                    input: document.getElementById('input').value,
                    output: document.getElementById('output').value,
                    output_replace: document.getElementById('outputReplace').value,
                    validate_then_generate: document.getElementById('validateThenGenerate').value
                },
                'Collection': {
                    collection_capacity: document.getElementById('collectionCapacity').value,
                    sort_by: document.getElementById('sortBy').value,
                    correlation_threshold: document.getElementById('correlationThreshold').value,
                    resolve_correlation: document.getElementById('resolveCorrelation').value,
                    resolve_similar_rules: document.getElementById('resolveSimilarRules').value
                },
                'Generator Stop': {
                    max_ascended_strategies: document.getElementById('maxAscendedStrategies').value,
                    max_calculated_strategies: document.getElementById('maxCalculatedStrategies').value,
                    max_working_minutes: document.getElementById('maxWorkingMinutes').value
                },
                'Acceptance Criteria': {
                    max_consecutive_losses: document.getElementById('maxConsecutiveLosses').value,
                    max_drawdown_percent: document.getElementById('maxDrawdownPercent').value,
                    max_equity_drawdown: document.getElementById('maxEquityDrawdown').value,
                    max_stagnation_days: document.getElementById('maxStagnationDays').value,
                    max_stagnation_percent: document.getElementById('maxStagnationPercent').value,
                    min_count_of_trades: document.getElementById('minCountOfTrades').value,
                    min_profit: document.getElementById('minProfit').value,
                    min_profit_factor: document.getElementById('minProfitFactor').value,
                    min_profit_per_day: document.getElementById('minProfitPerDay').value,
                    min_r_squared: document.getElementById('minRSquared').value,
                    min_return_to_drawdown: document.getElementById('minReturnToDrawdown').value,
                    min_win_loss_ratio: document.getElementById('minWinLossRatio').value
                },
                'Account Settings': {
                    account_currency: document.getElementById('accountCurrency').value,
                    initial_account: document.getElementById('initialAccount').value,
                    leverage: document.getElementById('leverage').value
                },
                'Strategy Properties': {
                    entry_lots: document.getElementById('entryLots').value,
                    trade_direction_mode: document.getElementById('tradeDirectionMode').value,
                    opposite_entry_signal: document.getElementById('oppositeEntrySignal').value,
                    stop_loss_usage: document.getElementById('stopLossUsage').value,
                    stop_loss_type: document.getElementById('stopLossType').value,
                    stop_loss_range_min: document.getElementById('stopLossRangeMin').value,
                    stop_loss_range_max: document.getElementById('stopLossRangeMax').value,
                    take_profit_usage: document.getElementById('takeProfitUsage').value,
                    take_profit_range_min: document.getElementById('takeProfitRangeMin').value,
                    take_profit_range_max: document.getElementById('takeProfitRangeMax').value,
                    max_entry_slots: document.getElementById('maxEntrySlots').value,
                    max_exit_slots: document.getElementById('maxExitSlots').value
                },
                'Backtester': {
                    exit_trade_at: document.getElementById('exitTradeAt').value,
                    close_at_backtest_end: document.getElementById('closeAtBacktestEnd').value
                },
                'Data Horizon': {
                    max_data_bars: document.getElementById('maxDataBars').value,
                    use_data_start: document.getElementById('useDataStart').value,
                    data_start: document.getElementById('dataStart').value,
                    use_data_end: document.getElementById('useDataEnd').value,
                    data_end: document.getElementById('dataEnd').value
                },
                'Out of Sample': {
                    data_start_percent: document.getElementById('dataStartPercent').value,
                    data_end_percent: document.getElementById('dataEndPercent').value
                },
                'Trading Session': {
                    session_open: document.getElementById('sessionOpen').value,
                    session_close: document.getElementById('sessionClose').value,
                    friday_close: document.getElementById('fridayClose').value,
                    trade_on_sunday: document.getElementById('tradeOnSunday').value,
                    close_at_session_close: document.getElementById('closeAtSessionClose').value,
                    close_at_friday_close: document.getElementById('closeAtFridayClose').value
                },
                'Symbol Info': {
                    spread: document.getElementById('spread').value,
                    swap_long: document.getElementById('swapLong').value,
                    swap_short: document.getElementById('swapShort').value,
                    commission: document.getElementById('commission').value
                },
                'Miscellaneous': {
                    update_best: document.getElementById('updateBest').value,
                    show_top: document.getElementById('showTop').value
                },
                'Indicators used by the Generator': {
                    ind_accelerator_oscillator: document.getElementById('indAcceleratorOscillator').checked,
                    ind_accumulation_distribution: document.getElementById('indAccumulationDistribution').checked,
                    ind_adx: document.getElementById('indAdx').checked,
                    ind_alligator: document.getElementById('indAlligator').checked,
                    ind_average_true_range: document.getElementById('indAverageTrueRange').checked,
                    ind_awesome_oscillator: document.getElementById('indAwesomeOscillator').checked,
                    ind_bears_power: document.getElementById('indBearsPower').checked,
                    ind_bollinger_bands: document.getElementById('indBollingerBands').checked,
                    ind_bulls_power: document.getElementById('indBullsPower').checked,
                    ind_candle_color: document.getElementById('indCandleColor').checked,
                    ind_commodity_channel_index: document.getElementById('indCommodityChannelIndex').checked,
                    ind_demarker: document.getElementById('indDemarker').checked,
                    ind_directional_indicators: document.getElementById('indDirectionalIndicators').checked,
                    ind_do_not_exit: document.getElementById('indDoNotExit').checked,
                    ind_donchian_channel: document.getElementById('indDonchianChannel').checked,
                    ind_entry_time: document.getElementById('indEntryTime').checked,
                    ind_envelopes: document.getElementById('indEnvelopes').checked,
                    ind_exit_time: document.getElementById('indExitTime').checked,
                    ind_force_index: document.getElementById('indForceIndex').checked,
                    ind_long_or_short: document.getElementById('indLongOrShort').checked,
                    ind_macd: document.getElementById('indMacd').checked,
                    ind_macd_signal: document.getElementById('indMacdSignal').checked,
                    ind_momentum: document.getElementById('indMomentum').checked,
                    ind_money_flow_index: document.getElementById('indMoneyFlowIndex').checked,
                    ind_moving_average: document.getElementById('indMovingAverage').checked,
                    ind_moving_average_of_oscillator: document.getElementById('indMovingAverageOfOscillator').checked,
                    ind_moving_averages_crossover: document.getElementById('indMovingAveragesCrossover').checked,
                    ind_on_balance_volume: document.getElementById('indOnBalanceVolume').checked,
                    ind_pin_bar: document.getElementById('indPinBar').checked,
                    ind_rsi: document.getElementById('indRsi').checked,
                    ind_rvi: document.getElementById('indRvi').checked,
                    ind_rvi_signal: document.getElementById('indRviSignal').checked,
                    ind_standard_deviation: document.getElementById('indStandardDeviation').checked,
                    ind_stochastic: document.getElementById('indStochastic').checked,
                    ind_stochastic_signal: document.getElementById('indStochasticSignal').checked,
                    ind_volumes: document.getElementById('indVolumes').checked,
                    ind_williams_percent_range: document.getElementById('indWilliamsPercentRange').checked
                },
                'Indicators options': {
                    randomize_ma_method: document.getElementById('randomizeMaMethod').checked,
                    max_indicator_period: document.getElementById('maxIndicatorPeriod').value,
                    randomize_ma_shift: document.getElementById('randomizeMaShift').checked
                },
                'Auto-save collection': {
                    auto_save_at_minutes: document.getElementById('autoSaveAtMinutes').value,
                    auto_save_at_collected: document.getElementById('autoSaveAtCollected').value
                },
                'Optimizer': {
                    enable_optimizer: document.getElementById('enableOptimizer').value,
                    numeric_values_steps: document.getElementById('numericValuesSteps').value,
                    optimize_protections: document.getElementById('optimizeProtections').value,
                    optimize_by: document.getElementById('optimizeBy').value
                },
                'Monte Carlo': {
                    enable_monte_carlo: document.getElementById('enableMonteCarlo').value,
                    count_of_tests: document.getElementById('countOfTests').value,
                    valid_tests_percent: document.getElementById('validTestsPercent').value,
                    spread_max: document.getElementById('spreadMax').value,
                    slippage_max: document.getElementById('slippageMax').value,
                    skip_entries_percent: document.getElementById('skipEntriesPercent').value,
                    skip_exits_percent: document.getElementById('skipExitsPercent').value,
                    rand_close_percent: document.getElementById('randClosePercent').value,
                    ind_params_change_probability: document.getElementById('indParamsChangeProbability').value,
                    ind_params_max_change_percent: document.getElementById('indParamsMaxChangePercent').value,
                    ind_params_min_delta_steps: document.getElementById('indParamsMinDeltaSteps').value,
                    rand_first_bar_percent: document.getElementById('randFirstBarPercent').value,
                    mc_max_consecutive_losses: document.getElementById('mcMaxConsecutiveLosses').value,
                    mc_max_drawdown_percent: document.getElementById('mcMaxDrawdownPercent').value,
                    mc_max_equity_drawdown: document.getElementById('mcMaxEquityDrawdown').value,
                    mc_max_stagnation_days: document.getElementById('mcMaxStagnationDays').value,
                    mc_max_stagnation_percent: document.getElementById('mcMaxStagnationPercent').value,
                    mc_min_count_of_trades: document.getElementById('mcMinCountOfTrades').value,
                    mc_min_profit: document.getElementById('mcMinProfit').value,
                    mc_min_profit_factor: document.getElementById('mcMinProfitFactor').value,
                    mc_min_profit_per_day: document.getElementById('mcMinProfitPerDay').value,
                    mc_min_r_squared: document.getElementById('mcMinRSquared').value,
                    mc_min_return_to_drawdown: document.getElementById('mcMinReturnToDrawdown').value,
                    mc_min_win_loss_ratio: document.getElementById('mcMinWinLossRatio').value
                }
              
              
              
            };
            
            // Convert settings object to INI format
            let iniData = '';
            for (const section in settings) {
                iniData += `[${section}]\n`;
                for (const key in settings[section]) {
                    iniData += `${key} = ${settings[section][key]}\n`;
                }
                iniData += '\n';
            }

            // Export INI data as a file
            const blob = new Blob([iniData], { type: 'text/plain' });
            const url = URL.createObjectURL(blob);
            const a = document.createElement('a');
            a.href = url;
            a.download = 'settings.ini';
            document.body.appendChild(a);
            a.click();
            document.body.removeChild(a);
            URL.revokeObjectURL(url);
        }
    </script>
</body>
</html>

Re: Express Generator - Wish List

I see more and more future in crypto and see also more and more automated crypto trading bots.

Maybe it will be great that it will be something very new for specially creating trading bots. or automated that. maybe a new money making for @Popov .

Re: Express Generator - Wish List

One feature that I would recommend for your consideration is a trailing stop activation level. For example, if the stop loss on a buy were set at 50 pips, then the trailing stop loss would be activated at a user-defined percentage of 50% of the stop loss or 44 pips. After that, the trailing stop would be adjusted at every bar close based on the market making new highs since the activation. Is that a feature that you may be willing to implement?

Re: Express Generator - Wish List

Hi Popov,

Thank you for the great development of EAS & Express Generator. I have a few requests:-
1) make Minimum months on profit % available in acceptance criteria
2) add function Optimize strategiy's Normalization
3) add function to auto-download historical data directly from MT4/MT5 to Express Generator's data folder

Regards,
AFR

47 (edited by aaronpriest 2023-09-24 13:54:17)

Re: Express Generator - Wish List

AdvanceFxRobot wrote:

add function to auto-download historical data directly from MT4/MT5 to Express Generator's data folder

You can sort of do this by creating a symbolic link from the \Files folder of Metatrader to the \data folder of Express Generator, then you don't have to copy files between the two folders. ;-)

Re: Express Generator - Wish List

Thanks aaronpriest. It would be good if there is fully automated solution to generate historical data in MT4/5 (perhaps through EA) then export to designated folder. Your option is good, however, still need manual intervention where the pain points where we have to go through each symbol to export data and specify max. count of bars/spread (symbol dependant)/commission etc.

49 (edited by aaronpriest 2023-09-25 02:06:15)

Re: Express Generator - Wish List

AdvanceFxRobot wrote:

Thanks aaronpriest. It would be good if there is fully automated solution to generate historical data in MT4/5 (perhaps through EA) then export to designated folder. Your option is good, however, still need manual intervention where the pain points where we have to go through each symbol to export data and specify max. count of bars/spread (symbol dependant)/commission etc.

There's a way to do that too, but it's a lot more complicated. I'll try to explain... ;-)

For starters, you have to rewrite the script a bit to convert it to an expert advisor. The reason for doing that is because a script will run and close and not stay on a chart, where an EA will stay present on a chart with your settings. Then you can create a custom profile called Data Export or whatever you like, load as many charts as you want, attach your new EA to each chart with your custom settings where it runs once but stays attached, and then when you have all your charts setup (I do the 28 major pairs), you can switch your profile back to Default for your normal charts. I have a few brokers setup like this, and all I have to do is switch my profile from Default to Data Export, wait a minute for it to export the data for each chart, and switch my profile back to Default. I can export H1 history for 28 pairs across 4 brokers in a couple minutes this way, and all the data is linked to the Express Generator's data folder via symbolic links, one linked subfolder for each broker. Pretty sweet automation!

Re: Express Generator - Wish List

Thanks aaronpriest for detail explanation. I will give it a try.

Posts: 26 to 50 of 85

Pages Previous 1 2 3 4 Next

You must login or register to post a reply

Forex Software → Express Generator → Express Generator - Wish List

Similar topics in this forum