Used Python to find out why everyone can't win at Forex

  • 15 January 2022
Post image

This kind of verification has probably been done by many people over the years, but I’ll try to write about it here. This time, programming is irrelevant. In fact, Python is also irrelevant.
I am a person who melted a lot of money in Forex a little over 10 years ago. It was only a few million yen, but for a young me, it was enough to make me hang myself. Although many months have passed since then, I still feel that it is impossible to win in Forex due to the trauma of that time. In the following article, I am examining the use of AI to trade forex, but I am keeping the investment amount very small.

Implementing FX trade decisions with AI
Implementing FX trade decisions with AI
In my previous article, I investigated data on the relationship between FX …
> Read More

I don’t ever want to wake up in the morning and find that I’ve lost several months of my salary after gathering all kinds of information and using technical analysis to confidently take a position. The following is something that every trader knows, but I’m going to write about what I’ve noticed.

In the case of random trading without thinking about anything

Let’s consider the case of making a random decision by tossing a coin without thinking about the position. Then, I will investigate how much the expected value will be in a huge number of trials.

Prepare exchange rate data

First of all, I prepared the following CSV data for the dollar-yen per minute exchange rate. The period is 10 years from 2012/1/1 to 2021/12/31.


Then load and use as follows.

def get_csv_data():
  with open(f'USDJPY.csv') as f:
      reader = csv.reader(f)
      rate_arr = []
      for row in reader: rate_arr.append(row)
      return rate_arr

Random decision making

The next step is to use a random number in python to randomly decide whether to go long, short, or do nothing, with 1 being long and -1 being short.

def get_desition():
  rv = random.random()
  if rv < (1 / 360): return 1
  elif rv >= (1 - (1 / 360)): return -1
  return 0

This time, we will make a decision once every minute, so the probability of going long or short the dollar is once every six hours.

Always settle after six hours under any circumstances.

And then close the position exactly 6 hours later without any stop loss.

def get_profit(csv, i, desition):
  spread = 0
  start = float(csv[i][3])
  last = i + 360
  if last >= (len(csv) - 1):
    last = len(csv) - 1
  end = float(csv[last][3])
  spread = (end - start) * desition
  return spread, last

The details of the code are not important, but the point is that the function returns the range of profit and loss for a 6-hour position and the index at the time of closing.

The result of investing 10 million yen 1,000 times over without thinking for 10 years

Let’s simulate it with the following code. And calculate the average of the final profit and loss with 1000 trials. Note that we will ignore spread fees and swaps.

initial = 10000000 # Initial investment of 10 million yen
leverage = 3 # Leverage 3 times
unit = 10000 # Trading currency unit: 10000 currency
trials  1000
if __name__ == '__main__':
  csv_data = get_csv_data()
  amount_sum = 0
  for n in range(trials):
    amount = initial
    last = 0
    for i, c in enumerate(csv_data):
      if i < last: continue
      desition = get_desition()
      if desition == 0: continue
      rate = float(csv_data[i][3])
      position_unit = math.floor((asset_sum * leverage) / (unit * rate))
      if position_unit == 0: break # leaving
      spread, last = get_profit(csv_data, i, desition)
      amount += position_unit * unit * spread
    amount_sum += math.floor(amount)
  print(amount_sum / trials)

The result of investing 10 million yen 10 years x 1000 times is as follows.

average balance expected value Temporary maximum asset amount Temporary minimum asset amount Number of leaving
+98,232 Yen 100.98% 73,534,300 Yen 1,119,500 Yen 0

It’s so obvious that it makes no sense at all, but of course the expected value converges to 100%. If you take into account the actual spread commission, the expected value is a little lower. However, it is much better than my poor investment performance. Moreover, he has increased his assets more than 7 times, albeit temporarily. I don’t know if there is such a thing as a person who can mindlessly plunge 10 million yen into random FX trading.

Try to increase the leverage.

Leaving aside the smart people who actually trade with 3 times leverage, many junkies who touch FX may trade with 10-20 times leverage, or even more than 100 times leverage at overseas FX companies depending on the person. So let’s try to calculate the case of 10x, 20x and 100x leverage for 10 years x 1000 times under the exact same conditions.

leverage = 20 # 10 or 20 or 100
leverage average balance expected value Temporary maximum asset amount Number of leaving
10x -2,666,752 Yen 73.3% 714,204,000 Yen 135
20x -8,745,217 Yen 12.5% 3,734,987,699 Yen 847
100x -9,994,643 Yen 0.05% 14,572,122,800 Yen 1000
Just by increasing the leverage, the expected value goes down. And the higher the leverage, the lower the expected value. That's not surprising, just look at the number of exits. In other words, if you lose so much money that you can't trade anymore, you're done, so if you increase the leverage and the exit probability goes up, your average balance will go down. In particular, with 100x leverage, the number of times I was able to continue trading for 10 years was zero (I exited the market all together), which is a terrible result. However, the amount temporarily increased to a whopping 14 billion yen (laughs). If it were me, I would have said, "If only I had stopped at 14 billion yen," as I left the market and headed for the sea of trees.

Maybe high leverage is the reason why everyone loses.

As mentioned above, if you are trading dollar-yen at 3x leverage, you will have about 100% expected random probability, but as soon as you increase the leverage to 10x, the expected probability becomes 73%. And when you increase the leverage to 100 times or so, you lose all your money, 100% of it. There is no way that ordinary people like you, including me, can make good investment decisions on when and at what rate to go long or short. You may be able to make a slightly better position decision than random (100% expected value), but when you are leveraged more than 10 times, you should think that your expected value will be less than 100%. Moreover, it is very common to make wrong investment decisions when you have emotions.

If there would be no trading currency unit

If there is no unit of trading currency (usually 10,000), the expected value should converge to 100% probabilistically even if the leverage is high. Assuming that you can trade at $0.0001 or 0.0001 yen, you should be able to keep trying without exiting, which means that the expected value should mathematically be 100%. However, the larger the leverage, the larger the volatility, so it will not converge in a small number of trials. To prove this, I checked with 10x leverage and 1 trading unit, and the results were as follows.

leverage = 10
unit = 1
leverage average balance expected value Temporary maximum asset amount Number of leaving
10x -316,019 Yen 96.8% 3,004,282,686 Yen 0

Even with 10 times leverage, the expected value can be close to 100% without exiting the market. However, if the leverage is 20 times or more, the probability will not converge without a large number of trials, and as mentioned above, the impact of even one trading unit is not negligible (a decimal point in the trading unit is required).

In summary, we believe that most ordinary people will not be able to make a profit in Forex due to the following

  • High leverage rapidly increases the likelihood of exit.
  • Mathematical expectation is not realized because of the existence of trading units.
  • Spread fees are present.

Are stop-loss and stop-loss profit-taking pointless?

By the way, how does the expected value change when you take measures such as stop-loss or stop-loss profit fixing (fixing profit by fishing up the stop-loss line)? The above was settled 6 hours after taking the position without question, but if the rate moves to a loss of 0.25%, the loss is cut, and if there is an unrealized profit of 0.35% or more, the expected value if the rule is to raise the stop line for profit fixing with the rate fluctuations will be as follows.

average balance expected value Temporary maximum asset amount Number of leaving
-1,136,520 88.6% 79,300,899 Yen 0

Contrary to my expectation, the expected value was much lower than “forced settlement after 6 hours”. I think stop-losses and such are absolutely important, but when you start trading randomly, it may have a negative impact.

I knew I couldn’t do forex.

People who can trade within 3 times leverage, collect and analyze a lot of information every day, and trade emotionlessly like a machine will be able to make a profit. I can’t do that. If I were to trade with a leverage of 1~2 times, I would have to research a lot of economic information, take a position with an investment amount of about 1 million yen, stare at the rate with anxiety, and if I were lucky enough to get a 1 yen spread between the dollar and yen, I would only make 10,000 yen. I can’t do this. Even if I increase my investment, I’m the type of person who can’t stay in a position when I have “unrealized profit of several million yen,” and I’ll fix my profit.
For an ordinary person like me, it means that forex is entertainment gambling like pachinko or horse racing. It would be better for me to improve the accuracy of system trading, at least as shown in the following article.

Implementing FX trade decisions with AI
Implementing FX trade decisions with AI
In my previous article, I investigated data on the relationship between FX …
> Read More

You May Also Like