
Need a robot or indicator based on this code? Order it on Freelance Go to Freelance
The “Heads or Tails” trading strategy belongs to the category of high-risk short-term trading approaches, used primarily in the stock market and the Forex market. Its name is derived from the randomness of decision-making, similar to tossing a coin (“heads” — buy the asset, “tails” — sell). This strategy is based exclusively on intuitive decisions or random signals and ignores fundamental market analysis factors.
How does the strategy work?
The strategy is structured as follows:
This strategy does not require a deep understanding of market mechanisms and analytics, but it also does not imply a serious approach to risk management.
Disadvantages of the strategy:
Application of the Strategy:
The strategy is more suitable for novice traders who want to familiarize themselves with the principles of exchange platforms and try trading without deep knowledge of technical analysis. However, professionals use this strategy extremely rarely, preferring scientifically based approaches that account for price behavior, trading volume, and companies’ fundamental indicators.
For experienced investors, this strategy represents more of an experimental method for testing hypotheses, rather than a stable way to earn money.
Thus, although the strategy is simple and accessible to every beginner, it carries significant risks and practically has no chance of generating sustainable income in the long term.
Let’s consider the main block of the random position opening signal:
if((b + s) == 0)
Here, the condition for the absence of open positions is checked. Variable b denotes the number of long (“buy”) positions, variable s — short (“sell”) positions. If the sum of both equals zero (b + s = 0), it means there is not a single open position.
if(::MathRand() % 2 == 0)
Inside the condition block triggered previously, a random number is checked. The ::MathRand() function generates a pseudo-random number from 0 to 32767 inclusive. Then this number is divided modulo by 2 (% 2) — if the remainder is 0, the next block is executed.
ticket = OrderSend(Symbol(),OP_BUY,iStartLots,Ask,iSlippage, Ask – iStopLoss * _Point, Ask + iTakeProfit * _Point, “VR Heads or Tails”, iMagicNumber,0,clrBlue); if(ticket<0) Print("OrderSend failed with an error #",GetLastError()); else Print("The OrderSend function has been completed successfully"); return;
If the random number is even (the remainder of division by 2 equals 0), the trading robot opens a long position (buy) with a volume of iLots. After successfully opening the position, the function execution is interrupted by the return operator.
ticket = OrderSend(Symbol(),OP_SELL,iStartLots,Bid,iSlippage, Bid + iStopLoss * _Point, Bid – iTakeProfit * _Point, "VR Heads or Tails", iMagicNumber,0,clrRed); if(ticket<0) Print("OrderSend failed with an error #",GetLastError()); else Print("The OrderSend function has been completed successfully"); return;
If the random number was odd (the remainder of division by 2 differed from zero), a short position (sell) with a volume of iLots is opened, and the further execution of the function is also terminated.
Final logic of the fragment:
* The presence of the trader's open positions is checked.
* If there are no open positions, a random trade direction is chosen: either buy (long), or sell (short).
* An opened trade automatically stops the further operation of the function.
Thus, this code is a simple example of an algorithm that makes the decision to open a market position randomly.
