public OpenCloseStrategy() { BuyCounter = 0; SellCounter = 0; prevOutput = StrategyOutput.None; //set strategy variables KandleMultiplier = OpenCloseStrategySettings.settings.KandleMultiplier; ExitSignalStrength = OpenCloseStrategySettings.settings.ExitSignalStrength; ExitImmediate = OpenCloseStrategySettings.settings.ExitImmediate; Smoothing = OpenCloseStrategySettings.settings.Smoothing; //set escape strategy variables EscapeTraps = OpenCloseStrategySettings.settings.EscapeTraps; EscapeTrapCandleIdx = OpenCloseStrategySettings.settings.EscapeTrapCandleIdx; EscapeTrapSignalStrength = OpenCloseStrategySettings.settings.EscapeTrapSignalStrength; //set missed position strategy variables GrabMissedPosition = OpenCloseStrategySettings.settings.GrabMissedPosition; MissedPositionStartCandleIndex = OpenCloseStrategySettings.settings.MissedPositionStartCandleIndex; MissedPositionEndCandleIndex = OpenCloseStrategySettings.settings.MissedPositionEndCandleIndex; MissedPositionSignalStrength = OpenCloseStrategySettings.settings.MissedPositionSignalStrength; HeavyRiskPercentage = OpenCloseStrategySettings.settings.HeavyRiskPercentage; }
private void ResetCounters() { BuyCounter = 0; SellCounter = 0; prevOutput = StrategyOutput.None; LatestSignalStrength = 0; }
public void PlaceOrders(decimal quantity, decimal currrentClose, StrategyOutput strategyOutput, StrategyData strategyData) { BinancePlacedOrder placedOrder = null; if (strategyOutput == StrategyOutput.OpenPositionWithBuy || strategyOutput == StrategyOutput.ExitPositionWithBuy || strategyOutput == StrategyOutput.BookProfitWithBuy || strategyOutput == StrategyOutput.MissedPositionBuy || strategyOutput == StrategyOutput.ExitPositionHeavyLossWithBuy) { placedOrder = webCall.PlaceBuyOrder(quantity, -1, true); } else if (strategyOutput == StrategyOutput.OpenPositionWithSell || strategyOutput == StrategyOutput.ExitPositionWithSell || strategyOutput == StrategyOutput.BookProfitWithSell || strategyOutput == StrategyOutput.MissedPositionSell || strategyOutput == StrategyOutput.ExitPositionHeavyLossWithSell) { placedOrder = webCall.PlaceSellOrder(quantity, -1, true); } else if (strategyOutput == StrategyOutput.EscapeTrapWithBuy) { if (BinanceBotSettings.settings.ReOpenOnEscape) { placedOrder = webCall.PlaceBuyOrder(quantity * 2, -1, true); } else { placedOrder = webCall.PlaceBuyOrder(quantity, -1, true); } } else if (strategyOutput == StrategyOutput.EscapeTrapWithSell) { if (BinanceBotSettings.settings.ReOpenOnEscape) { placedOrder = webCall.PlaceSellOrder(quantity * 2, -1, true); } else { placedOrder = webCall.PlaceSellOrder(quantity, -1, true); } } else { //no action } if (placedOrder != null) { DumpToLog(currrentClose, strategyOutput.ToString(), strategyData); } }
private string Smoothing; //DEMA #endregion #region -Validator Methods for Buy Sell Decision- private bool IsValidSignal(bool isBuy, bool isSell, int signalStrength, StrategyOutput currentState, ref StrategyOutput prevState) { LatestSignalStrength = signalStrength; if (prevState != currentState) { BuyCounter = 0; SellCounter = 0; prevState = currentState; } //simple logic of current and previous states match if (prevState == currentState && prevState != StrategyOutput.None) { if (isBuy && (currentState == StrategyOutput.OpenPositionWithBuy || currentState == StrategyOutput.BookProfitWithBuy)) { ++BuyCounter; return(BuyCounter >= signalStrength); } if (isSell && (currentState == StrategyOutput.OpenPositionWithSell || currentState == StrategyOutput.BookProfitWithSell)) { ++SellCounter; return(SellCounter >= signalStrength); } if (isBuy && currentState == StrategyOutput.ExitPositionWithBuy) { ++BuyCounter; return(BuyCounter >= signalStrength); } if (isSell && currentState == StrategyOutput.ExitPositionWithSell) { ++SellCounter; return(SellCounter >= signalStrength); } if (ExitImmediate && currentState == StrategyOutput.ExitPositionWithBuy) { ++BuyCounter; return(BuyCounter >= signalStrength); } if (ExitImmediate && currentState == StrategyOutput.ExitPositionWithSell) { ++SellCounter; return(SellCounter >= signalStrength); } if (!isBuy && !isSell && currentState == StrategyOutput.EscapeTrapWithBuy) { ++BuyCounter; return(BuyCounter >= signalStrength); } if (!isBuy && !isSell && currentState == StrategyOutput.EscapeTrapWithSell) { ++SellCounter; return(SellCounter >= signalStrength); } if (!isBuy && !isSell && currentState == StrategyOutput.MissedPositionBuy) { ++BuyCounter; return(BuyCounter >= signalStrength); } if (!isBuy && !isSell && currentState == StrategyOutput.MissedPositionSell) { ++SellCounter; return(SellCounter >= signalStrength); } } return(false); }