Description
OrglobalFX Pure Renko cBOT
Trades based on bricks formed.
For example,
If two green bricks appear, take a long position. And otherwise.
Automatic breakeven and trailing stop added.
Contact:
Telegram- @orglobalng
using System;
using System.Linq;
using cAlgo.API;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;
using cAlgo.Indicators;
namespace cAlgo.Robots
{
[Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
public class _OFX_CBOT_123121032022_PURERENKO : Robot
{
[Parameter("Volume", DefaultValue = 2000)]
public double _volume { get; set; }
[Parameter("Instance Name", DefaultValue = "OrglobalFxPureRenko")]
public string InstanceName { get; set; }
// Breakeven parameters
[Parameter("Include Break-Even", DefaultValue = true, Group = "Protection")]
public bool IncludeBreakEven { get; set; }
[Parameter("Break-Even Extra (pips)", DefaultValue = 1, MinValue = 0, Group = "Protection")]
public double BreakEvenExtraPips { get; set; }
[Parameter("Trail after Break-Even", DefaultValue = true, Group = "Protection")]
public bool Includetrail { get; set; }
public AverageTrueRange _atr;
public double StopLossInPips, BreakEvenPips, trailingstoppips, TakeProfitInPips;
protected override void OnStart()
{
_atr = Indicators.AverageTrueRange(26, MovingAverageType.Simple);
//Label
InstanceName = InstanceName + "_" + SymbolName;
}
protected override void OnBar()
{
if (Bars.ClosePrices.Last(1) > Bars.ClosePrices.Last(2))
{
Open(TradeType.Buy, InstanceName);
}
if (Bars.ClosePrices.Last(1) < Bars.ClosePrices.Last(2))
{
Open(TradeType.Sell, InstanceName);
}
}
protected override void OnTick()
{
StopLossInPips = Math.Abs(Bars.OpenPrices.Last(1) - Symbol.Bid);
StopLossInPips = Math.Round(((StopLossInPips) / Symbol.PipSize), 0);
TakeProfitInPips = Math.Round((_atr.Result.LastValue / Symbol.PipSize), 0);
if (IncludeBreakEven)
{
BreakEvenAdjustment();
}
}
private void Open(TradeType tradeType, string InstanceName)
{
//Check there's no existing position before entering a trade
var position = Positions.Find(InstanceName, SymbolName);
if (position == null)
{
var _volumedv2 = Math.Round(_volume / 2, 0);
ExecuteMarketOrder(tradeType, SymbolName, _volumedv2, InstanceName, StopLossInPips, TakeProfitInPips);
ExecuteMarketOrder(tradeType, SymbolName, _volumedv2, InstanceName, StopLossInPips, null);
}
}
#region close trades
//Function for closing trades
private void Close(TradeType tradeType, string InstanceName)
{
foreach (var position in Positions.FindAll(InstanceName, SymbolName, tradeType))
ClosePosition(position);
}
#endregion
#region Break Even
// code from clickalgo.com
private void BreakEvenAdjustment()
{
var positn = Positions.Find(InstanceName, SymbolName);
var allPositions = Positions.FindAll(InstanceName, SymbolName);
foreach (Position position in allPositions)
{
var entryPrice = position.EntryPrice;
var distance = position.TradeType == TradeType.Buy ? Symbol.Bid - entryPrice : entryPrice - Symbol.Ask;
//Breakeven @ takeprofit
BreakEvenPips = TakeProfitInPips / 2;
//Trailing stop is triggered when winning pips equals the 3 times the takeprofit pips
trailingstoppips = TakeProfitInPips * 2;
Print("trailingstoppips: ", trailingstoppips);
Print("BreakEvenPips: ", BreakEvenPips);
Print("TakeProfitInPips: ", TakeProfitInPips);
Print("StopLossInPips: ", StopLossInPips);
// move stop loss to break even plus and additional (x) pips
if (distance >= BreakEvenPips * Symbol.PipSize)
{
if (position.TradeType == TradeType.Buy)
{
if (position.StopLoss <= position.EntryPrice + (Symbol.PipSize * BreakEvenExtraPips) || position.StopLoss == null)
{
// && position.Pips >= trailingstoppips)
if (Includetrail)
{
//ModifyPosition(position, position.EntryPrice);
position.ModifyStopLossPrice(position.EntryPrice + (Symbol.PipSize * BreakEvenExtraPips));
Print("Stop Loss to Break Even set for BUY position {0}", position.Id);
if (position.Pips >= trailingstoppips)
position.ModifyTrailingStop(true);
}
else if (!Includetrail)
{
//ModifyPosition(position, position.EntryPrice + (Symbol.PipSize * BreakEvenExtraPips), position.TakeProfit);
position.ModifyStopLossPrice(position.EntryPrice + (Symbol.PipSize * BreakEvenExtraPips));
Print("Stop Loss to Break Even set for BUY position {0}", position.Id);
}
}
}
else
{
if (position.StopLoss >= position.EntryPrice - (Symbol.PipSize * BreakEvenExtraPips) || position.StopLoss == null)
{
// && position.Pips >= trailingstoppips)
if (Includetrail)
{
ModifyPosition(position, entryPrice - (Symbol.PipSize * BreakEvenExtraPips), position.TakeProfit);
Print("Stop Loss to Break Even set for SELL position {0}", position.Id);
if (position.Pips >= trailingstoppips)
position.ModifyTrailingStop(true);
}
else if (!Includetrail)
{
ModifyPosition(position, entryPrice - (Symbol.PipSize * BreakEvenExtraPips), position.TakeProfit);
Print("Stop Loss to Break Even set for SELL position {0}", position.Id);
}
}
}
}
}
}
#endregion
}
}
Orglobalfx01
Joined on 03.03.2021
- Distribution: Free
- Language: C#
- Trading platform: cTrader Automate
- File name: _OFX_CBOT_123121032022_PURERENKO.algo
- Rating: 0
- Installs: 1704
- Modified: 29/03/2022 12:59
Warning! Running cBots downloaded from this section may lead to financial losses. Use them at your own risk.
Note that publishing copyrighted material is strictly prohibited. If you believe there is copyrighted material in this section, please use the Copyright Infringement Notification form to submit a claim.
Comments
Log in to add a comment.
HA
Thanks so much for sharing these. I have read a lot of articles with similar topics but none of them are as detailed. I will learn more and practice. 5 letter words
Hi, would it be possible to modify it to open a trade only after 3 bricks appear after an opposite color?