Example #1
0
 public LoadSettingsDialog(TradersSettings sets) : this()
 {
     this.sets                   = sets;
     tbIntervalMs.Text           = sets.PayloadSets.SleepInterval.ToString();
     tbThreadsCount.Text         = sets.PayloadSets.TradersCount.ToString();
     tbPropOfPlacingOrder.Text   = sets.PayloadSets.RequestPerIterationProb.ToStringDefault();
     tbPayloadSinusPeriodMs.Text = sets.PayloadSets.SinusoidPeriodMs.ToStringDefault();
     tbFadeInPeriod.Text         = sets.PayloadSets.FadingInSeconds.ToStringDefault();
     tbStairsCount.Text          = sets.PayloadSets.StepsCount.ToStringDefault();
     tbStairInterval.Text        = sets.PayloadSets.SecondsPerStep.ToStringDefault();
     if (sets.PayloadSets.Mode == PayloadSettingsMode.Even)
     {
         tbDistrEven.Checked = true;
     }
     else if (sets.PayloadSets.Mode == PayloadSettingsMode.Sinusoidal)
     {
         tbDistrSinus.Checked = true;
     }
     else if (sets.PayloadSets.Mode == PayloadSettingsMode.FadeIn)
     {
         tbModeFadeIn.Checked = true;
     }
     else if (sets.PayloadSets.Mode == PayloadSettingsMode.Stairs)
     {
         tbModeStairsUp.Checked = true;
     }
     else
     {
         tbModeStairsDown.Checked = true;
     }
 }
Example #2
0
        private void btnTradingSets_Click(object sender, EventArgs e)
        {
            var sets = TradersSettings.ReadSettings();
            var dlg  = new TradingSettingsDialog(sets);

            dlg.ShowDialog();
        }
Example #3
0
        public static SettingsPreset GetPresetByIndex(int index)
        {
            var defSets    = TradersSettings.ReadSettings();
            var presetType = Presets[index].GetType();

            return((SettingsPreset)presetType.GetConstructor(new[] { typeof(TradersSettings) }).Invoke(new object[] { defSets }));
        }
Example #4
0
 public StairsPreset(TradersSettings defaultSettings)
 {
     this.defaultSettings = defaultSettings;
     ImageIndex           = 8;
     Title       = "The Load level increases step by step";
     Description = "The price is fixed.\n" +
                   "The Load level increases every 5 seconds. In total there are 8 steps.\n" +
                   "Load level settings affect the maximum number of traders (threads) and the minimum interval between placing orders.";
 }
 public SetupStrategiesDialog(TradersSettings settings) : this()
 {
     this.settings           = settings;
     tbShotIterations.Text   = settings.TradeSets.RequestsBeforeGrabTheBook.ToStringDefault();
     tbShotProbOfTake.Text   = settings.TradeSets.ProbOfGrabTheBook.ToStringDefault();
     tbMMActionInterval.Text = settings.TradeSets.MilisecondsBeforUpdateMMLevels.ToStringDefault();
     tbMMOrdersCount.Text    = settings.TradeSets.MarketLevelsCount.ToStringDefault();
     tbMMlotsPerOrder.Text   = settings.TradeSets.MarketMakerOrderLots.ToStringDefault();
 }
Example #6
0
 public SinusoidalPreset(TradersSettings defaultSettings)
 {
     this.defaultSettings = defaultSettings;
     ImageIndex           = 6;
     Title       = "Change the Load by a sinusoid";
     Description = "The price changes according to the sinusoid.\n" +
                   "The Load level changes according to the sinusoid.\n" +
                   "Load level settings affect the maximum number of traders (threads) and the minimum interval between placing orders.";
 }
Example #7
0
 public MakerTakerEven(TradersSettings defaultSettings)
 {
     this.defaultSettings = defaultSettings;
     ImageIndex           = 3;
     Title       = "Traders and market maker";
     Description = "A number of traders who place order at the market price make a deals with one or two market makers.\n\n" +
                   "The price changes according to the sinusoid.\n" +
                   "The Load level value does not change in time.\n" +
                   "Load level settings affects the number of traders (threads) and the interval between placing orders.";
 }
Example #8
0
 public SimpleFadeInPreset(TradersSettings defaultSettings)
 {
     this.defaultSettings = defaultSettings;
     ImageIndex           = 4;
     Title       = "Growing the Load level";
     Description = "A simple case with growing TPS value.\n\n" +
                   "The price is fixed.\n" +
                   "The Load level grows to the maximum value.\n" +
                   "Load level settings affect the maximum number of traders (threads) and the minimum interval between placing orders.";
 }
Example #9
0
        public override TradersSettings Build(int payload)
        {
            var sets = new TradersSettings
            {
                PricingSets = new TradersSettings.PricingSettings
                {
                    PricingMode = PricingSettingsMode.Fixed
                },
                MoneyManagementSets = new TradersSettings.MoneyManagementSettings
                {
                    Tickers           = defaultSettings.MoneyManagementSets.Tickers.ToList(),
                    FixedTickerIndex  = 0,
                    LotsMax           = 20,
                    LotsMin           = 10,
                    TradeRandomTicker = false
                },
                TradeSets = new TradersSettings.TradeSettings
                {
                    MakersCount         = 0,
                    OneShotTradersCount = 0,
                    ProbOfNewOrder      = 70,
                    ProbOfMassCancel    = 15,
                    ProbOfCancelOrder   = 15,
                    ProbErrorRequest    = 0
                },
                PayloadSets = new TradersSettings.PayloadSettings
                {
                    Mode = PayloadSettingsMode.Stairs,
                    RequestPerIterationProb = 100,
                    StepsCount     = 8,
                    SecondsPerStep = 5
                }
            };

            defaultSettings.CopyCommonSettingsToTarget(sets);
            var paySets = sets.PayloadSets;

            if (payload < 4)
            {
                paySets.TradersCount  = payload * 8;
                paySets.SleepInterval = 20;
            }
            else if (payload < 7)
            {
                paySets.TradersCount  = payload * 10;
                paySets.SleepInterval = 7;
            }
            else
            {
                paySets.TradersCount  = payload * 12;
                paySets.SleepInterval = 5;
            }

            return(sets);
        }
Example #10
0
        public override TradersSettings Build(int payload)
        {
            var sets = new TradersSettings
            {
                PricingSets = new TradersSettings.PricingSettings
                {
                    PricingMode           = PricingSettingsMode.Sinusoidal,
                    SinusAmplitudePercent = 1.5m,
                    SinusPeriodMs         = 1000 * 10
                },
                MoneyManagementSets = new TradersSettings.MoneyManagementSettings
                {
                    Tickers           = defaultSettings.MoneyManagementSets.Tickers.ToList(),
                    FixedTickerIndex  = 0,
                    LotsMax           = 10,
                    LotsMin           = 10,
                    TradeRandomTicker = false
                },
                TradeSets = new TradersSettings.TradeSettings
                {
                    MakersCount                    = 1,
                    OneShotTradersCount            = 0,
                    ProbOfNewOrder                 = 70,
                    ProbOfMassCancel               = 15,
                    ProbOfCancelOrder              = 15,
                    ProbErrorRequest               = 5,
                    MarketMakerOrderLots           = 200,
                    MarketLevelsCount              = 4,
                    MilisecondsBeforUpdateMMLevels = 1000
                },
                PayloadSets = new TradersSettings.PayloadSettings
                {
                    Mode = PayloadSettingsMode.Even,
                    RequestPerIterationProb = 100
                }
            };

            defaultSettings.CopyCommonSettingsToTarget(sets);
            var paySets = sets.PayloadSets;

            if (payload < 4)
            {
                paySets.TradersCount  = payload * 5;
                paySets.SleepInterval = 30;
            }
            else
            {
                sets.TradeSets.MakersCount = 2;
                paySets.TradersCount       = payload * 10;
                paySets.SleepInterval      = 7;
            }

            return(sets);
        }
Example #11
0
 public OneShotPreset(TradersSettings defaultSettings)
 {
     this.defaultSettings = defaultSettings;
     ImageIndex           = 5;
     Title       = "One-shot trader";
     Description = "A number of traders place orders randomly at the market price. " +
                   "One-shot trader places a \"superorder\", that takes all placed orders.\n\n" +
                   "The price changes according to the sinusoid.\n" +
                   "The Load level value does not change in time.\n" +
                   "Load level settings affect the number of traders (threads) and the interval between placing orders.";
 }
Example #12
0
 public TakerPoolPreset(TradersSettings defaultSettings)
 {
     this.defaultSettings = defaultSettings;
     ImageIndex           = 2;
     Title       = "Traders only";
     Description = "A simple case. A number of traders who place order at the exact market price " +
                   "make a deals with each other.\n\n" +
                   "The price is fixed.\n" +
                   "The Load level value does not change in time.\n" +
                   "Load level settings affect the number of traders (threads) and the interval between placing orders.";
 }
Example #13
0
 public SlowLoadGrowthPreset(TradersSettings defaultSettings)
 {
     this.defaultSettings = defaultSettings;
     ImageIndex           = 7;
     Title       = "Changing the price and growing the Load level";
     Description = "A number of traders grows constantly" +
                   "but intervals between placing orders slowly shorten in time.\n\n" +
                   "The price changes according to the sinusoid.\n" +
                   "The Load level grows to the maximum value.\n" +
                   "Load level settings affect the maximum number of traders (threads) and the minimum interval between placing orders.";
 }
        public MoneyManagementDialog()
        {
            InitializeComponent();
            settings         = TradersSettings.ReadSettings();
            tbContracts.Text = JsonConvert.SerializeObject(settings.MoneyManagementSets.Tickers, Formatting.Indented);
            cbTradeRandomContract.Checked = settings.MoneyManagementSets.TradeRandomTicker;
            tbFixedContractId.Text        = settings.MoneyManagementSets.FixedTickerIndex.ToString();
            tbLotsMin.Text = settings.MoneyManagementSets.LotsMin.ToStringDefault();
            tbLotsMax.Text = settings.MoneyManagementSets.LotsMax.ToStringDefault();

            ControlsValidation.SetupErrorProvider(out tbLotsMinErrorProvider, tbLotsMin);
            ControlsValidation.SetupErrorProvider(out tbLotsMaxErrorProvider, tbLotsMax);
        }
Example #15
0
        public override TradersSettings Build(int payload)
        {
            var sets = new TradersSettings
            {
                PricingSets = new TradersSettings.PricingSettings
                {
                    PricingMode           = PricingSettingsMode.Sinusoidal,
                    SinusPeriodMs         = 2,
                    SinusAmplitudePercent = 1
                },
                MoneyManagementSets = new TradersSettings.MoneyManagementSettings
                {
                    Tickers           = defaultSettings.MoneyManagementSets.Tickers.ToList(),
                    FixedTickerIndex  = 0,
                    LotsMax           = 20,
                    LotsMin           = 10,
                    TradeRandomTicker = false
                },
                TradeSets = new TradersSettings.TradeSettings
                {
                    MakersCount         = 0,
                    OneShotTradersCount = 0,
                    ProbOfNewOrder      = 70,
                    ProbOfMassCancel    = 15,
                    ProbOfCancelOrder   = 15,
                    ProbErrorRequest    = 5
                },
                PayloadSets = new TradersSettings.PayloadSettings
                {
                    Mode                    = PayloadSettingsMode.FadeIn,
                    FadingInSeconds         = 60,
                    RequestPerIterationProb = 100
                }
            };

            defaultSettings.CopyCommonSettingsToTarget(sets);
            var paySets = sets.PayloadSets;

            if (payload < 4)
            {
                paySets.TradersCount  = payload * 15;
                paySets.SleepInterval = 20;
            }
            else
            {
                paySets.TradersCount  = payload * 18;
                paySets.SleepInterval = 5;
            }

            return(sets);
        }
Example #16
0
        public PricingSettingsDialog(TradersSettings sets) : this()
        {
            this.sets = sets;

            tbAmplitude.Text   = sets.PricingSets.SinusAmplitudePercent.ToStringDefault();
            cbSinusPeriod.Text = sets.PricingSets.SinusPeriodMs.ToStringDefault();
            if (sets.PricingSets.PricingMode == PricingSettingsMode.Fixed)
            {
                rbPriceFixed.Checked = true;
            }
            else if (sets.PricingSets.PricingMode == PricingSettingsMode.Sinusoidal)
            {
                rbPriceSinusoidal.Checked = true;
            }
        }
Example #17
0
        /// <summary>
        /// set up predefined test scenarios' buttons
        /// </summary>
        private void SetupPresets()
        {
            var defSets = TradersSettings.ReadSettings();

            SettingsPreset.Presets = new SettingsPreset[]
            {
                new TakerPoolPreset(defSets),
                new MakerTakerEven(defSets),
                new SimpleFadeInPreset(defSets),
                new OneShotPreset(defSets),
                new SinusoidalPreset(defSets),
                new SlowLoadGrowthPreset(defSets),
                new StairsPreset(defSets),
                new StairsDownPreset(defSets)
            };

            presetButtons = new List <Button>
            {
                btnPreset01, btnPreset02, btnPreset03, btnPreset04, btnPreset05, btnPreset06, btnPreset07, btnPreset08
            };

            for (var i = 0; i < presetButtons.Count; i++)
            {
                var preset = SettingsPreset.Presets[i];
                presetButtons[i].Tag        = i;
                presetButtons[i].ImageIndex = preset.ImageIndex;
                toolTip.SetToolTip(presetButtons[i], preset.Description);

                // setup and run the test on the button's click
                presetButtons[i].Click += (sender, args) =>
                {
                    if (pool != null)
                    {
                        return;
                    }
                    var presetIndex = (int)((Button)sender).Tag;
                    var dlg         = new PresetDialog(SettingsPreset.GetPresetByIndex(presetIndex));
                    if (dlg.ShowDialog() != DialogResult.OK)
                    {
                        return;
                    }
                    StartTest();
                };
            }

            toolTip.SetToolTip(btnStop, "Stop the test");
            toolTip.SetToolTip(btnManTest, "Manually set up and start a test");
        }
Example #18
0
        public CommonSettingsDialog()
        {
            InitializeComponent();
            settings = TradersSettings.ReadSettings();

            var logTypes = Enum.GetValues(typeof(LoggingLevel)).Cast <object>().ToArray();

            cbLoggingLevel.Items.AddRange(logTypes);
            cbLoggingLevel.SelectedItem = settings.LoggingLevel;
            cbSaveServersStat.Checked   = settings.LogServerStatistics;

            tbStatTimeframe.Text = settings.StatisticsTimeframeSeconds.ToStringDefault();
            tbTestDuration.Text  = settings.TestDurationSeconds.ToStringDefault();

            ControlsValidation.SetupErrorProvider(out tbStatTimeframeErrorProvider, tbStatTimeframe);
        }
Example #19
0
        public void TestPeriod()
        {
            var sets = new TradersSettings
            {
                PayloadSets = new TradersSettings.PayloadSettings
                {
                    SinusoidPeriodMs = 5000,
                    SleepInterval    = 20
                }
            };
            var calc = new SinusoidPayloadCalculator(sets);
            var a    = calc.GetNextInterval();

            Thread.Sleep(200);
            var b = calc.GetNextInterval();

            Assert.AreNotEqual(a, b);
        }
Example #20
0
        /// <summary>
        /// show the connection's settings dialog
        /// and apply the settings provided by the user
        /// </summary>
        private void btnSetupConnection_Click(object sender, EventArgs e)
        {
            if (pool != null)
            {
                return;
            }
            var sets = TradersSettings.ReadSettings();
            var dlg  = new ConnectionSettingsDialog
            {
                MatchingURI = sets.Uri,
                StatusURI   = sets.StatUri
            };

            dlg.ShowDialog();
            if (dlg.DialogResult != DialogResult.OK)
            {
                return;
            }
            sets.Uri     = dlg.MatchingURI;
            sets.StatUri = dlg.StatusURI;
            sets.SaveSettings();
        }
        public TradingSettingsDialog(TradersSettings sets) : this()
        {
            this.sets = sets;

            tbRandomPercNew.Text    = sets.TradeSets.ProbOfNewOrder.ToStringDefault();
            tbRandomPercCancel.Text = sets.TradeSets.ProbOfCancelOrder.ToStringDefault();
            int randomPercCancel = 0;

            if (int.TryParse(sets.TradeSets.ProbOfCancelOrder.ToStringDefault(), out randomPercCancel))
            {
                trbRandomPercCancel.Value = randomPercCancel;
            }

            tbRandomPercMass.Text = sets.TradeSets.ProbOfMassCancel.ToStringDefault();
            int randomPercMass = 0;

            if (int.TryParse(sets.TradeSets.ProbOfMassCancel.ToStringDefault(), out randomPercMass))
            {
                trbRandomPercMass.Value = randomPercMass;
            }
            tbErrorReqPerc.Text = sets.TradeSets.ProbErrorRequest.ToStringDefault();
            tbMakersCount.Text  = sets.TradeSets.MakersCount.ToStringDefault();
            tbOneShotCount.Text = sets.TradeSets.OneShotTradersCount.ToStringDefault();
        }
Example #22
0
 public Statistics(TradersSettings settings)
 {
     this.settings    = settings;
     timeframeSeconds = settings.StatisticsTimeframeSeconds;
 }