Sunday, March 12, 2017

A review of my one month FOREX trading experience

In Charts and Tables

My first month trading FOREX trading is now complete and as expected (but definitely not wanted) my account balance has gone down 52%. I have done a total 115 trades which equates to about 28 trades per week.

Trade History export to CSV

MetaTrader must have been designed by geeks for geeks as there is no export to CSV/Excell. Fortunately I am such aforementioned geek and created a script for this purpose. On the bright side is I expected to start learning MQL at some point so this started that process. You can find my script at this link: MetaTrader Export Trade History to CSV.

Lossing vs Winning Trades

I did really great in the first week, perhaps it was luck perhaps it was new trader confidence. Looking back at the trades I seldom had a stop loss, had a generous stop loss in place, or kept adjusting it, and I recall leaving the trades alone then coming back to them seeing profits and just setting a trailing stop loss; I can possibly confirm this by looking how the order duration changed over the weeks so I have added this as a TODO item.

Overall it's a good sign that I have more winning trades vs loosing trades per week.

Average Percentage Return for Lossing vs Winning Trades

This picture tells where the 51% overall loss comes from, even though I have a more winning trades the percentage gain is small compared to my loosing trades percentage loss.

Analyzing the Loosing Trades

Throughout the trading I would review my loosing trades and adjust my strategy, some of the first lessons were always setting stop losses which can be seen having the effect of lowering my loss % average. However I am now questioning that because after reviewing 10 of the loosing order I notice that if I held them I would have made a profit, the median time for that to happen is 21 hours. This needs further investigation so I have added a TODO item to modify the export script to include information like time to profit, max % drop, trade duration.

Order # Time to Profit? (H)
85563552
85656031
85741196
8603378511
860668618
86110398
862282045
862284424
862293539
863903280

Focus for the upcoming month

Bring the number of winning trades up by strictly following my price action enter trade rules and using mental stop losses too allow up to 48 (might change this) hours for the trade to come back if I called it wrong.

How was your first month trading FOREX? Please share in the comments section.

Sunday, February 12, 2017

Least Correlated Forex Currency Pairs

Minimizing risk trough Un-correlation

The number of possible major/minor currency is large and trading currencies that are correlated logically increases risk. My Google search for least correlated Forex pairs came up empty so I decided to run the analysis myself.

Using information from this list on Oanda I created a JS script that would loop through the table entires and return the least correlated pairs based on the 1 year value. To my surprise I had to permit high correlations of >0.80 for the major currencies, and >0.95 for the major and minor currencies together to get values returned.

Major Currencies

["AUD/USD", "EUR/AUD", "EUR/CHF", "EUR/GBP", "EUR/USD", "NZD/USD"]

Major + Minor Currencies

["AUD/CAD", "AUD/CHF", "AUD/HKD", "AUD/JPY", "AUD/NZD", "AUD/SGD", "CAD/CHF", "CAD/HKD", "CAD/JPY", "CAD/SGD", "CHF/HKD", "CHF/JPY", "CHF/ZAR", "EUR/AUD", "EUR/CAD", "EUR/CHF", "EUR/CZK", "EUR/DKK", "EUR/GBP", "EUR/HKD", "EUR/HUF", "EUR/NOK", "EUR/NZD", "EUR/PLN", "EUR/SEK", "EUR/SGD", "EUR/TRY", "GBP/AUD", "GBP/JPY"]

Feel free to comment or follow me @danielsokolows.

Console JS Snippet


document.querySelector('#Table_button').click(); // swithc to table mode which shows numbers
var aPairElementList = Array.prototype.slice.call(document.querySelector('#Table').querySelectorAll('.currency_pair'),0);
var aReturnedPairs = aPairElementList.map(function(oElement) {return oElement.innerText}); // whatever remains in this array is our uncorrelated pairs
var aPairsCompared = [];
// for each pair select it
for (var i = 0; i < aPairElementList.length; i++) {
 aPairElementList[i].querySelector('button').click();
    // NEED TO RESCAN THE aPairElementList as the nodes have been destroyed and re-created so our aPairElementList is outdated
    aPairElementList = Array.prototype.slice.call(document.querySelector('#Table').querySelectorAll('.currency_pair'),0);

    // no loop over the entire list and prune any correlated pairs from our aReturnedPairs
    for (var j = 0; j < aPairElementList.length; j++) {
        // go to the nth sibling and check for corelation, and remove from our returned list if correlated positively
        // 7th  next sibling is 1 Year
        if (aPairElementList[i].innerText != aPairElementList[j].innerText && aPairsCompared.indexOf(aPairElementList[i].innerText + aPairElementList[j].innerText) == -1) {
            var nCorelationValue = Number(aPairElementList[j].nextElementSibling.nextElementSibling.nextElementSibling.nextElementSibling.nextElementSibling.nextElementSibling.nextElementSibling.innerText);
            //console.assert(nCorelationValue != NaN, 'Must never have failed to parse correlation');
            if (nCorelationValue == NaN) {throw new Exception('Must never have failed to parse correlation')};
            if (nCorelationValue >= 0.95) {
               console.log('Removing because \'' + aPairElementList[i].innerText + '\' correlation with \'' + aPairElementList[j].innerText + '\' is ' + nCorelationValue);
               aReturnedPairs.splice(aReturnedPairs.indexOf(aPairElementList[j].innerText), 1);
               // store the reverse of the pair so we don't don't compare it
               aPairsCompared.push(aPairElementList[j].innerText + aPairElementList[i].innerText);
            }
        }
    }
}
console.log(aReturnedPairs)