Пример #1
0
        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);
        }
Пример #2
0
 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);
     }
 }
Пример #3
0
 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);
 }
Пример #4
0
        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));
        }
Пример #5
0
        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;
        }
Пример #6
0
        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));
        }
Пример #7
0
        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));
        }
Пример #8
0
        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));
            }
        }
Пример #9
0
 public CommandPosition(IStringLocalizer stringLocalizer,
                        SimplePosition simplePosition,
                        IServiceProvider serviceProvider) : base(serviceProvider)
 {
     m_StringLocalizer = stringLocalizer;
     m_SimplePosition  = simplePosition;
 }
Пример #10
0
 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
 }
Пример #11
0
        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()));
        }
Пример #12
0
        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);
        }
Пример #13
0
        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);
        }
Пример #14
0
        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);
            }
        }
Пример #15
0
        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);
        }
Пример #16
0
        /// <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);
Пример #17
0
        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);
        }
Пример #18
0
        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);
        }
Пример #19
0
        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);
        }
Пример #20
0
        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));
            }
        }
Пример #21
0
        /// <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);
Пример #22
0
        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);
        }
Пример #23
0
        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)));
        }
Пример #24
0
        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 :\
                }
            }
        }
Пример #25
0
        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);
        }
Пример #26
0
        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);
        }
Пример #27
0
        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);
            }
        }
Пример #28
0
        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);
        }
Пример #29
0
        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);
        }
Пример #30
0
        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;
                    }
                }
            }
        }