private bool BookProfit(SimplePosition position, StrategyData strategyData, decimal reward) { if (position.PositionID == -1) { return(false); } if (position.PositionType == "BUY" && strategyData.longPercentage >= strategyData.profitFactor * reward) { return(true); } if (position.PositionType == "SELL" && strategyData.shortPercentage >= strategyData.profitFactor * reward) { return(true); } if (position.PositionType == "BUY" && strategyData.isSell && strategyData.longPercentage >= reward / 2) { return(true); } if (position.PositionType == "SELL" && strategyData.isBuy && strategyData.shortPercentage >= reward / 2) { return(true); } return(false); }
private bool ExitPosition(SimplePosition position, StrategyData strategyData, decimal risk, int signalStrength) { if (position.PositionID == -1) { //no positions to exit from return(false); } else if (position.PositionType == "BUY" && strategyData.longPercentage <= risk && IsValidSignal(strategyData.isBuy, strategyData.isSell, ExitSignalStrength, StrategyOutput.ExitPositionWithSell, ref prevOutput))//15 { return(true); } else if (position.PositionType == "SELL" && strategyData.shortPercentage <= risk && IsValidSignal(strategyData.isBuy, strategyData.isSell, ExitSignalStrength, StrategyOutput.ExitPositionWithBuy, ref prevOutput))//15 { return(true); } else if (position.PositionType == "BUY" && strategyData.isSell && IsValidSignal(strategyData.isBuy, strategyData.isSell, signalStrength / 2, StrategyOutput.ExitPositionWithSell, ref prevOutput)) { return(true); } else if (position.PositionType == "SELL" && strategyData.isBuy && IsValidSignal(strategyData.isBuy, strategyData.isSell, signalStrength / 2, StrategyOutput.ExitPositionWithBuy, ref prevOutput)) { return(true); } else { return(false); } }
private bool ExitPosition(SimplePosition position, ref StrategyData strategyData, decimal risk) { if (position.PositionType == PositionType.None) { return(false); } if (position.PositionType == PositionType.Buy && strategyData.Percentage <= risk)//15 { strategyData.Decision = StrategyDecision.Exit; strategyData.DecisionType = StrategyDecision.Sell; return(true); } if (position.PositionType == PositionType.Sell && strategyData.Percentage <= risk)//15 { strategyData.Decision = StrategyDecision.Exit; strategyData.DecisionType = StrategyDecision.Buy; return(true); } if (position.PositionType == PositionType.Buy && strategyData.isSell) { strategyData.Decision = StrategyDecision.Exit; strategyData.DecisionType = StrategyDecision.Sell; return(true); } if (position.PositionType == PositionType.Sell && strategyData.isBuy) { strategyData.Decision = StrategyDecision.Exit; strategyData.DecisionType = StrategyDecision.Buy; return(true); } return(false); }
public void VariantGenerator_AsExpected() { var mockSequenceProvider = new Mock <ISequenceProvider>(); mockSequenceProvider.SetupGet(x => x.RefNameToChromosome) .Returns(new Dictionary <string, IChromosome> { { "chr1", new Chromosome("chr1", "1", 0) } }); mockSequenceProvider.SetupGet(x => x.Sequence).Returns(new SimpleSequence("CAGCTGAA")); var sequenceProvider = mockSequenceProvider.Object; var position1 = SimplePosition.GetSimplePosition("chr1 2 . A T,G . PASS . GT:PS 0|1:123 2/2:789 0|2:456", sequenceProvider.RefNameToChromosome); var position2 = SimplePosition.GetSimplePosition("chr1 4 . C A,G . PASS . GT:PS 1|1:301 1|2:789 1|2:456", sequenceProvider.RefNameToChromosome); var position3 = SimplePosition.GetSimplePosition("chr1 6 . G C . PASS . GT:PS . 1|0:789 0/1:.", sequenceProvider.RefNameToChromosome); var functionBlockRanges = new List <int> { 4, 6, 8 }; var recomposer = new VariantGenerator(sequenceProvider); var recomposedPositions = recomposer.Recompose(new List <ISimplePosition> { position1, position2, position3 }, functionBlockRanges).ToList(); Assert.Equal(2, recomposedPositions.Count); Assert.Equal("chr1 2 . AGC AGA,GGG . PASS RECOMPOSED GT:PS . . 1|2:456", string.Join("\t", recomposedPositions[0].VcfFields)); Assert.Equal("chr1 2 . AGCTG GGATC,GGGTG . PASS RECOMPOSED GT:PS . 1|2:789 .", string.Join("\t", recomposedPositions[1].VcfFields)); }
public void Decide(ref StrategyData strategyData, SimplePosition position, RobotInput robotInput) { bool Decided = false; foreach (var decision in AllDecisions) { if (RunDecision(position, ref strategyData, decision, robotInput)) { ValidateDecision(robotInput, ref strategyData, GetDecisionStrength(decision), true); Decided = true; break; } } if (!Decided) { ResetDecision(ref strategyData); } //signal strength data strategyData.LatestSignalStrength = LatestSignalStrength;//improve this code laterz strategyData.BuyCounter = BuyCounter; strategyData.SellCounter = SellCounter; strategyData.PrevDecision = prevDecision; strategyData.PrevDecisionType = prevDecisionType; }
public void VariantGenerator_AllTrailingMissingValuesDroped() { var mockSequenceProvider = new Mock <ISequenceProvider>(); mockSequenceProvider.SetupGet(x => x.RefNameToChromosome) .Returns(new Dictionary <string, IChromosome> { { "chr1", new Chromosome("chr1", "1", 0) } }); mockSequenceProvider.SetupGet(x => x.Sequence).Returns(new SimpleSequence("CAGCTGAA")); var sequenceProvider = mockSequenceProvider.Object; var position1 = SimplePosition.GetSimplePosition("chr1 2 . A T,G . PASS . GT:GQ:PS 0|1:.:123 2/2 1|1:17:456", sequenceProvider.RefNameToChromosome); var position2 = SimplePosition.GetSimplePosition("chr1 4 . C A,G . PASS . GT:GQ:PS ./. 1|2 1|2:15.6:456", sequenceProvider.RefNameToChromosome); var position3 = SimplePosition.GetSimplePosition("chr1 6 . G C . PASS . GT:GQ:PS ./. 1|0 1|1:13:456", sequenceProvider.RefNameToChromosome); var functionBlockRanges = new List <int> { 4, 6, 8 }; var recomposer = new VariantGenerator(sequenceProvider); var recomposedPositions = recomposer.Recompose(new List <ISimplePosition> { position1, position2, position3 }, functionBlockRanges).ToList(); Assert.Single(recomposedPositions); Assert.Equal("chr1 2 . AGCTG GGATC,GGGTG,TGATC,TGGTC . PASS RECOMPOSED GT:GQ:PS . 1|2 3|4:13:456", string.Join("\t", recomposedPositions[0].VcfFields)); }
public void VariantGenerator_OverlappingDeletionAtTheEnd_Ignored() { var mockSequenceProvider = new Mock <ISequenceProvider>(); mockSequenceProvider.SetupGet(x => x.RefNameToChromosome) .Returns(new Dictionary <string, IChromosome> { { "chr1", new Chromosome("chr1", "1", 0) } }); mockSequenceProvider.SetupGet(x => x.Sequence).Returns(new SimpleSequence("CAGCTGAATCGCGA")); var sequenceProvider = mockSequenceProvider.Object; var position1 = SimplePosition.GetSimplePosition("chr1 2 . A T . PASS . GT 0|1 0/0", sequenceProvider.RefNameToChromosome); var position2 = SimplePosition.GetSimplePosition("chr1 4 . C A . PASS . GT 1|1 0/0", sequenceProvider.RefNameToChromosome); var position3 = SimplePosition.GetSimplePosition("chr1 4 . CTGAATCGCGA C . PASS . GT 0/0 0|1", sequenceProvider.RefNameToChromosome); var functionBlockRanges = new List <int> { 4, 6, 6 }; var recomposer = new VariantGenerator(sequenceProvider); var recomposedPositions = recomposer.Recompose(new List <ISimplePosition> { position1, position2, position3 }, functionBlockRanges).ToList(); Assert.Single(recomposedPositions); Assert.Equal("chr1 2 . AGC AGA,TGA . PASS RECOMPOSED GT 1|2 .", string.Join("\t", recomposedPositions[0].VcfFields)); }
public void GenerateOutput_NothingRecomposed_ReturnOriginalVcfFieldList() { var mockSequenceProvider = new Mock <ISequenceProvider>(); mockSequenceProvider.SetupGet(x => x.RefNameToChromosome) .Returns(new Dictionary <string, IChromosome> { { "chr1", new Chromosome("chr1", "1", 0) } }); mockSequenceProvider.SetupGet(x => x.Sequence).Returns(new SimpleSequence("CAGCTGAA")); var sequenceProvider = mockSequenceProvider.Object; var variantGenerator = new VariantGenerator(sequenceProvider); var position1 = SimplePosition.GetSimplePosition("chr1 2 . A T . PASS . GT:PS 0|1:123", sequenceProvider.RefNameToChromosome); var position2 = SimplePosition.GetSimplePosition("chr1 4 . C G . PASS . GT 0/1", sequenceProvider.RefNameToChromosome); var position3 = SimplePosition.GetSimplePosition("chr1 6 . G C . PASS . GT 0|1", sequenceProvider.RefNameToChromosome); var positions = new List <ISimplePosition> { position1, position2, position3 }; var recomposable = new List <bool> { true, true, true }; var functionBlockRanges = new List <int> { 4, 6, 8 }; var bufferedPositions = new BufferedPositions(positions, recomposable, functionBlockRanges); var positionProcessor = new PositionProcessor(_positionBufferMock.Object, _codonInfoProviderMock.Object, variantGenerator); var output = positionProcessor.GenerateOutput(bufferedPositions).ToArray(); for (int i = 0; i < output.Length; i++) { Assert.True(positions[i].VcfFields.SequenceEqual(output[i].VcfFields)); } }
public CommandPosition(IStringLocalizer stringLocalizer, SimplePosition simplePosition, IServiceProvider serviceProvider) : base(serviceProvider) { m_StringLocalizer = stringLocalizer; m_SimplePosition = simplePosition; }
private void SimplePositionTrasform() { #region radpdfprocessing-concepts-position_1 SimplePosition simplePosition = new SimplePosition(); simplePosition.Translate(20, 20); // Translates the position by (30, 30). simplePosition.Translate(30, 30); // Translates the position by (20, 20) overwriting the previous translations. #endregion }
internal static SimplePosition GetSimplePosition(string vcfLine, IDictionary <string, IChromosome> refNameToChromosome) { string[] vcfFields = vcfLine.OptimizedSplit('\t'); var chromosome = ReferenceNameUtilities.GetChromosome(refNameToChromosome, vcfFields[VcfCommon.ChromIndex]); int position = int.Parse(vcfFields[VcfCommon.PosIndex]); return(SimplePosition.GetSimplePosition(chromosome, position, vcfFields, new NullVcfFilter())); }
private bool OpenMissedPosition(SimplePosition position, ref StrategyData strategyData) { //position already exists if (position.PositionType != PositionType.None) { return(false); } //in middle of a decision if (strategyData.isBuy || strategyData.isSell) { return(false); } //no historical data available if (string.IsNullOrEmpty(strategyData.histdata)) { return(false); } //invalid historical data StrategyDecision signaldecision = StrategyDecision.None; int signalperiod = -1; GetSignalData(strategyData, ref signaldecision, ref signalperiod); if (signaldecision == StrategyDecision.None || signalperiod == -1) { return(false); } //missed buy position if (signaldecision == StrategyDecision.Buy && signalperiod >= MissedPositionStartCandleIndex && signalperiod <= MissedPositionEndCandleIndex)//3,5,200 { strategyData.Decision = StrategyDecision.OpenMissed; strategyData.DecisionType = StrategyDecision.Buy; return(true); } //missed sell position if (signaldecision == StrategyDecision.Sell && signalperiod >= MissedPositionStartCandleIndex && signalperiod <= MissedPositionEndCandleIndex)//3,5,200 { strategyData.Decision = StrategyDecision.OpenMissed; strategyData.DecisionType = StrategyDecision.Sell; return(true); } return(false); }
private bool EscapeTrap(SimplePosition position, ref StrategyData strategyData) { //no open positions if (position.PositionType == PositionType.None) { return(false); } //no historical decisions available if (string.IsNullOrEmpty(strategyData.histdata)) { return(false); } //in middle of decision if (strategyData.isBuy || strategyData.isSell) { return(false); } //invalid historical data StrategyDecision signaldecision = StrategyDecision.None; int signalperiod = -1; GetSignalData(strategyData, ref signaldecision, ref signalperiod); if (signaldecision == StrategyDecision.None || signalperiod == -1) { return(false); } //the bot is trapped with sell position!! if (position.PositionType == PositionType.Sell && signaldecision == StrategyDecision.Buy && signalperiod >= EscapeTrapCandleIdx)//3,300 { strategyData.Decision = StrategyDecision.Escape; strategyData.DecisionType = StrategyDecision.Buy; return(true); } //the bot is trapped with buy position if (position.PositionType == PositionType.Buy && signaldecision == StrategyDecision.Sell && signalperiod >= EscapeTrapCandleIdx)//3,300 { strategyData.Decision = StrategyDecision.Escape; strategyData.DecisionType = StrategyDecision.Sell; return(true); } return(false); }
public IEnumerable <SimplePosition> GetRecomposedPositions(IDictionary <string, IChromosome> refNameToChromosome) { foreach (var variantSite in RecomposedAlleles.Keys.OrderBy(x => x)) { var varInfo = RecomposedAlleles[variantSite]; var altAlleleList = new List <string>(); var genotypeIndex = 1; // genotype index of alt allele var sampleGenotypes = new List <int> [_numSamples]; for (var i = 0; i < _numSamples; i++) { sampleGenotypes[i] = new List <int>(); } List <List <string> > allLinkedVids = new List <List <string> >(); foreach (string altAllele in varInfo.AltAlleleToSample.Keys.OrderBy(x => x)) { var(sampleAlleles, linkedVids) = varInfo.AltAlleleToSample[altAllele]; int currentGenotypeIndex; if (altAllele == variantSite.RefAllele) { currentGenotypeIndex = 0; } else { currentGenotypeIndex = genotypeIndex; genotypeIndex++; altAlleleList.Add(altAllele); allLinkedVids.Add(linkedVids); } foreach (var sampleAllele in sampleAlleles) { SetGenotypeWithAlleleIndex(sampleGenotypes[sampleAllele.SampleIndex], sampleAllele.HaplotypeIndex, currentGenotypeIndex); } } string altAlleleColumn = string.Join(",", altAlleleList); var vcfFields = GetVcfFields(variantSite, varInfo, altAlleleColumn, sampleGenotypes); var chromosome = ReferenceNameUtilities.GetChromosome(refNameToChromosome, vcfFields[VcfCommon.ChromIndex]); var position = SimplePosition.GetSimplePosition(chromosome, variantSite.Start, vcfFields, new NullVcfFilter(), true); for (var i = 0; i < allLinkedVids.Count; i++) { position.LinkedVids[i] = allLinkedVids[i]; } yield return(position); } }
public void ExtractSample_MitoHeteroplasmy_AsExpected() { var provider = new MitoHeteroplasmyProvider(); provider.Add(1, "C", new[] { 0.123, 0.200, 0.301 }, new[] { 1, 2, 4 }); provider.Add(1, "G", new[] { 0.101, 0.201 }, new[] { 1, 2 }); var simplePosition = new SimplePosition(ChromosomeUtilities.ChrM, 1, "A", new[] { "C", "T" }); var formatIndices = new FormatIndices(); formatIndices.Set("GT:SQ:AD:AF:F1R2:F2R1:DP:SB:MB:PS"); var sample = SampleFieldExtractor.ExtractSample("1|2:3.96:0,15,85:0.195:13,6:20,2:100:17,16,4,4:13,20,4,4:534234", formatIndices, simplePosition, provider); Assert.Equal(new[] { 15 / 100.0, 85 / 100.0 }, sample.VariantFrequencies); Assert.Equal(new[] { "14.29", "null" }, sample.HeteroplasmyPercentile); }
/// <summary> /// Get all Positions for the given symbol /// </summary> /// <param name="robotInput"></param> /// <param name="strategyData"></param> /// <param name="position"></param> /// <param name="isLive"></param> public void GetOpenPosition(RobotInput robotInput, ref StrategyData strategyData, ref SimplePosition position, bool isLive) { if (!isLive) { return; } getpositions: position = new SimplePosition { PositionType = PositionType.None, EntryPrice = -1, Quantity = robotInput.quantity }; var positions = client.GetPositions(default, WebcallTimeout, true);
private bool EscapeTrap(SimplePosition position, StrategyData strategyData) { //no open positions if (position.PositionID == -1) { return(false); } //no historical decisions available if (string.IsNullOrEmpty(strategyData.histdata)) { return(false); } //in middle of decision if (strategyData.isBuy || strategyData.isSell) { return(false); } //invalid historical data string decisiontype = ""; int decisionperiod = -1; GetLatestDecision(strategyData.histdata, ref decisiontype, ref decisionperiod); if (string.IsNullOrEmpty(decisiontype) || decisionperiod == -1) { return(false); } //the bot is trapped with sell position!! if (position.PositionType == "SELL" && decisiontype == "B" && decisionperiod >= EscapeTrapCandleIdx && IsValidSignal(false, false, EscapeTrapSignalStrength, StrategyOutput.EscapeTrapWithBuy, ref prevOutput))//3,300 { return(true); } //the bot is trapped with buy position if (position.PositionType == "BUY" && decisiontype == "S" && decisionperiod >= EscapeTrapCandleIdx && IsValidSignal(false, false, EscapeTrapSignalStrength, StrategyOutput.EscapeTrapWithSell, ref prevOutput))//3,300 { return(true); } return(false); }
private bool OpenMissedPosition(SimplePosition position, StrategyData strategyData) { //position already exists if (position.PositionID != -1) { return(false); } //in middle of a decision if (strategyData.isBuy || strategyData.isSell) { return(false); } //no historical data available if (string.IsNullOrEmpty(strategyData.histdata)) { return(false); } //invalid historical data string decisiontype = ""; int decisionperiod = -1; GetLatestDecision(strategyData.histdata, ref decisiontype, ref decisionperiod); if (string.IsNullOrEmpty(decisiontype) || decisionperiod == -1) { return(false); } //missed buy position if (decisiontype == "B" && decisionperiod >= MissedPositionStartCandleIndex && decisionperiod <= MissedPositionEndCandleIndex && IsValidSignal(false, false, MissedPositionSignalStrength, StrategyOutput.MissedPositionBuy, ref prevOutput))//3,5,200 { return(true); } //missed sell position if (decisiontype == "S" && decisionperiod >= MissedPositionStartCandleIndex && decisionperiod <= MissedPositionEndCandleIndex && IsValidSignal(false, false, MissedPositionSignalStrength, StrategyOutput.MissedPositionSell, ref prevOutput))//3,5,200 { return(true); } return(false); }
private bool OpenPosition(SimplePosition position, StrategyData strategyData, int signalStrength) { if (position.PositionID != -1) { return(false); } if (strategyData.isBuy && IsValidSignal(strategyData.isBuy, strategyData.isSell, signalStrength, StrategyOutput.OpenPositionWithBuy, ref prevOutput)) { return(true); } if (strategyData.isSell && IsValidSignal(strategyData.isBuy, strategyData.isSell, signalStrength, StrategyOutput.OpenPositionWithSell, ref prevOutput)) { return(true); } return(false); }
public void GenerateOutput_Return_OriginalAndRecomposed_VcfFieldList() { var mockSequenceProvider = new Mock <ISequenceProvider>(); mockSequenceProvider.SetupGet(x => x.RefNameToChromosome) .Returns(new Dictionary <string, IChromosome> { { "chr1", new Chromosome("chr1", "1", 0) } }); mockSequenceProvider.SetupGet(x => x.Sequence).Returns(new SimpleSequence("CAGCTGAA")); var sequenceProvider = mockSequenceProvider.Object; var variantGenerator = new VariantGenerator(sequenceProvider); var position1 = SimplePosition.GetSimplePosition("chr1 2 . A T . PASS . GT:PS 0|1:.", sequenceProvider.RefNameToChromosome); var position2 = SimplePosition.GetSimplePosition("chr1 4 . C G . PASS . GT 1/1", sequenceProvider.RefNameToChromosome); var position3 = SimplePosition.GetSimplePosition("chr1 6 . G C . PASS . GT 0|1", sequenceProvider.RefNameToChromosome); var positions = new List <ISimplePosition> { position1, position2, position3 }; var recomposable = new List <bool> { true, true, true }; var functionBlockRanges = new List <int> { 4, 6, 8 }; var bufferedPositions = new BufferedPositions(positions, recomposable, functionBlockRanges); var positionProcessor = new PositionProcessor(_positionBufferMock.Object, _codonInfoProviderMock.Object, variantGenerator); var output = positionProcessor.GenerateOutput(bufferedPositions).ToArray(); var expectedOutput = new string[4][]; expectedOutput[0] = position1.VcfFields; expectedOutput[1] = new[] { "chr1", "2", ".", "AGCTG", "AGGTG,TGGTC", ".", "PASS", "RECOMPOSED", "GT", "1|2" }; expectedOutput[2] = position2.VcfFields; expectedOutput[3] = position3.VcfFields; for (int i = 0; i < output.Length; i++) { Assert.True(expectedOutput[i].SequenceEqual(output[i].VcfFields)); } }
/// <summary> /// Get All Positions for given Symbol /// </summary> /// <param name="position"></param> /// <param name="quantity"></param> /// <param name="profitFactor"></param> public void GetCurrentPosition(ref SimplePosition position, decimal quantity, ref decimal profitFactor) { getpositions: position = new SimplePosition { PositionID = -1, PositionType = "", EntryPrice = -1, Quantity = quantity, Trend = "", Mood = "" }; var positions = client.GetPositions(default, true);
private bool ExitPositionHeavyLoss(SimplePosition position, StrategyData strategyData, decimal HeavyRiskPercentage) { //no position to exit from if (position.PositionID == -1) { return(false); } if (position.PositionType == "BUY" && strategyData.longPercentage <= HeavyRiskPercentage) { return(true); } if (position.PositionType == "SELL" && strategyData.shortPercentage <= HeavyRiskPercentage) { return(true); } return(false); }
public IEnumerable <ISimplePosition> Recompose(List <ISimplePosition> recomposablePositions, List <int> functionBlockRanges) { var positionSet = PositionSet.CreatePositionSet(recomposablePositions, functionBlockRanges); var alleleSet = positionSet.AlleleSet; var alleleIndexBlockToSampleIndex = positionSet.AlleleIndexBlockToSampleIndex; var numSamples = positionSet.NumSamples; _sequenceProvider.LoadChromosome(alleleSet.Chromosome); int regionStart = alleleSet.Starts[0]; string lastRefAllele = alleleSet.VariantArrays.Last()[0]; int regionEnd = alleleSet.Starts.Last() + lastRefAllele.Length + 100; // make it long enough if (regionEnd > _sequenceProvider.Sequence.Length) { regionEnd = _sequenceProvider.Sequence.Length; } string totalRefSequence = _sequenceProvider.Sequence.Substring(regionStart - 1, regionEnd - regionStart); // VCF positions are 1-based var recomposedAlleleSet = new RecomposedAlleleSet(positionSet.ChrName, numSamples); var decomposedPosVarIndex = new HashSet <(int PosIndex, int VarIndex)>(); foreach (var(alleleIndexBlock, sampleAlleles) in alleleIndexBlockToSampleIndex) { var(start, _, refAllele, altAllele) = GetPositionsAndRefAltAlleles(alleleIndexBlock, alleleSet, totalRefSequence, regionStart, decomposedPosVarIndex); var variantSite = new VariantSite(start, refAllele); if (!recomposedAlleleSet.RecomposedAlleles.TryGetValue(variantSite, out var variantInfo)) { variantInfo = GetVariantInfo(positionSet, alleleIndexBlock); recomposedAlleleSet.RecomposedAlleles[variantSite] = variantInfo; } variantInfo.AddAllele(altAllele, sampleAlleles); } // Set decomposed tag to positions used for recomposition foreach (var indexTuple in decomposedPosVarIndex) { recomposablePositions[indexTuple.PosIndex].IsDecomposed[indexTuple.VarIndex] = true; } return(recomposedAlleleSet.GetRecomposedVcfRecords().Select(x => SimplePosition.GetSimplePosition(x, _sequenceProvider.RefNameToChromosome, true))); }
private void CalculatePercentageChange(SimplePosition order, decimal currentClose, decimal leverage, decimal decreaseOnNegative, ref StrategyData strategyData) { if (order.PositionID != -1) { strategyData.shortPercentage = leverage * ((order.EntryPrice - currentClose) / order.EntryPrice) * 100; strategyData.longPercentage = leverage * ((currentClose - order.EntryPrice) / order.EntryPrice) * 100; if (strategyData.shortPercentage < 0 && order.PositionType == "SELL") { strategyData.profitFactor = decreaseOnNegative; } else if (strategyData.longPercentage < 0 && order.PositionType == "BUY") { strategyData.profitFactor = decreaseOnNegative; } else { //meh :\ } } }
private bool OpenPosition(SimplePosition position, ref StrategyData strategyData) { if (position.PositionType != PositionType.None) { return(false); } if (strategyData.isBuy) { strategyData.Decision = StrategyDecision.Open; strategyData.DecisionType = StrategyDecision.Buy; return(true); } if (strategyData.isSell) { strategyData.Decision = StrategyDecision.Open; strategyData.DecisionType = StrategyDecision.Sell; return(true); } return(false); }
private bool TakeProfit(SimplePosition position, ref StrategyData strategyData, decimal reward) { if (position.PositionType == PositionType.None) { return(false); } if (position.PositionType == PositionType.Buy && strategyData.Percentage >= strategyData.profitFactor * reward) { strategyData.Decision = StrategyDecision.TakeProfit; strategyData.DecisionType = StrategyDecision.Sell; return(true); } if (position.PositionType == PositionType.Sell && strategyData.Percentage >= strategyData.profitFactor * reward) { strategyData.Decision = StrategyDecision.TakeProfit; strategyData.DecisionType = StrategyDecision.Buy; return(true); } if (position.PositionType == PositionType.Buy && strategyData.isSell && strategyData.Percentage >= reward / 2) { strategyData.Decision = StrategyDecision.TakeProfit; strategyData.DecisionType = StrategyDecision.Sell; return(true); } if (position.PositionType == PositionType.Sell && strategyData.isBuy && strategyData.Percentage >= reward / 2) { strategyData.Decision = StrategyDecision.TakeProfit; strategyData.DecisionType = StrategyDecision.Buy; return(true); } return(false); }
private bool RunDecision(SimplePosition position, ref StrategyData strategyData, StrategyDecision decision, RobotInput robotInput) { if (!DecisionSet.Contains(decision.ToString())) { return(false); } if (decision == StrategyDecision.Open) { return(OpenPosition(position, ref strategyData)); } else if (decision == StrategyDecision.OpenMissed) { return(OpenMissedPosition(position, ref strategyData)); } else if (decision == StrategyDecision.ExitHeavy) { return(ExitPositionHeavyLoss(position, ref strategyData)); } else if (decision == StrategyDecision.Exit) { return(ExitPosition(position, ref strategyData, robotInput.risk)); } else if (decision == StrategyDecision.TakeProfit) { return(TakeProfit(position, ref strategyData, robotInput.reward)); } else if (decision == StrategyDecision.Escape) { return(EscapeTrap(position, ref strategyData)); } else { return(false); } }
public void VariantGenerator_NoMnvAfterTrimming_NotRecompose() { var mockSequenceProvider = new Mock <ISequenceProvider>(); mockSequenceProvider.SetupGet(x => x.RefNameToChromosome) .Returns(new Dictionary <string, IChromosome> { { "chr1", new Chromosome("chr1", "1", 0) } }); mockSequenceProvider.SetupGet(x => x.Sequence).Returns(new SimpleSequence("CAGCTGAA")); var sequenceProvider = mockSequenceProvider.Object; var position1 = SimplePosition.GetSimplePosition("chr1 1 . C A . PASS . GT:PS 1|0:1584593 1|1:. 0|1:.", sequenceProvider.RefNameToChromosome); var position2 = SimplePosition.GetSimplePosition("chr1 2 . A C . PASS . GT:PS 0|1:1584593 0/0:. 0/0:.", sequenceProvider.RefNameToChromosome); var functionBlockRanges = new List <int> { 3, 4 }; var recomposer = new VariantGenerator(sequenceProvider); var recomposedPositions = recomposer.Recompose(new List <ISimplePosition> { position1, position2 }, functionBlockRanges).ToList(); Assert.Empty(recomposedPositions); }
private bool ExitPositionHeavyLoss(SimplePosition position, ref StrategyData strategyData) { //no position to exit from if (position.PositionType == PositionType.None) { return(false); } if (position.PositionType == PositionType.Buy && strategyData.Percentage <= HeavyRiskPercentage) { strategyData.Decision = StrategyDecision.ExitHeavy; strategyData.DecisionType = StrategyDecision.Sell; return(true); } if (position.PositionType == PositionType.Sell && strategyData.Percentage <= HeavyRiskPercentage) { strategyData.Decision = StrategyDecision.ExitHeavy; strategyData.DecisionType = StrategyDecision.Buy; return(true); } return(false); }
public void StartRoBot(RobotInput robotInput, bool isLive) { #region -strategy and function level variables- var openclosestrategy = new OpenCloseStrategy(); StrategyData strategyData = new StrategyData(1); var errorCount = 0; //improve this further later webCall.AssignBinanceWebCallFeatures(robotInput.symbol); #endregion using (webCall.client = new BinanceClient()) { while (true) { try { #region -variables refreshed every cycle- Stopwatch sw = new Stopwatch(); sw.Start(); var currentPosition = new SimplePosition(robotInput.quantity); strategyData = new StrategyData(strategyData.profitFactor);//tracking updated check for more elegant ways to write this.. Thread.Sleep(pingtime); #endregion //get kandles from server webCall.GetKLinesDataCached(robotInput.timeframe, robotInput.candleCount, ref strategyData); //get open positions from server webCall.GetOpenPosition(robotInput, ref strategyData, ref currentPosition, isLive); //run strategy over the kandles openclosestrategy.RunStrategy(robotInput, currentPosition, ref strategyData); //place orders based on strategy output webCall.PlaceOrders(robotInput, strategyData, isLive); sw.Stop(); //display data to UI Utility.DumpToConsole(strategyData, currentPosition, robotInput, BollingerFactor, ref LastAvoidReason, sw.ElapsedMilliseconds); } catch (Exception ex) { Utility.LogExceptions(ex, ""); Thread.Sleep(10); ++errorCount; } if (errorCount >= 300) { break; } } } }