Beispiel #1
0
        public static string GetActiveSetting(PTMagic ptmagicInstance, ref bool headerLinesAdded)
        {
            string result = "";

            foreach (string line in ptmagicInstance.PairsLines)
            {
                if (line.IndexOf("PTMagic_ActiveSetting", StringComparison.InvariantCultureIgnoreCase) > -1)
                {
                    result = line.Replace("PTMagic_ActiveSetting", "", StringComparison.InvariantCultureIgnoreCase);
                    result = result.Replace("#", "");
                    result = result.Replace("=", "").Trim();
                    result = SystemHelper.StripBadCode(result, Constants.WhiteListProperties);
                    break;
                }
            }

            if (result.Equals(""))
            {
                SettingsHandler.WriteHeaderLines("Pairs", ptmagicInstance);
                SettingsHandler.WriteHeaderLines("DCA", ptmagicInstance);
                SettingsHandler.WriteHeaderLines("Indicators", ptmagicInstance);
                headerLinesAdded = true;
            }

            return(result);
        }
Beispiel #2
0
        public static void WriteHeaderLines(string fileType, PTMagic ptmagicInstance)
        {
            List <string> fileLines = (List <string>)ptmagicInstance.GetType().GetProperty(fileType + "Lines").GetValue(ptmagicInstance, null);

            // Writing Header lines
            fileLines.Insert(0, "");
            fileLines.Insert(0, "# ####################################");
            fileLines.Insert(0, "# PTMagic_LastChanged = " + DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToShortTimeString());
            fileLines.Insert(0, "# PTMagic_ActiveSetting = " + SystemHelper.StripBadCode(ptmagicInstance.DefaultSettingName, Constants.WhiteListProperties));
            fileLines.Insert(0, "# ####################################");

            ptmagicInstance.GetType().GetProperty(fileType + "Lines").SetValue(ptmagicInstance, fileLines);
        }
Beispiel #3
0
        public static bool RemoveSingleMarketSettings(PTMagic ptmagicInstance)
        {
            bool result = false;

            try
            {
                List <string> cleanedUpPairsLines      = new List <string>();
                List <string> cleanedUpDCALines        = new List <string>();
                List <string> cleanedUpIndicatorsLines = new List <string>();

                bool removedPairsSingleMarketSettings = false;
                foreach (string pairsLine in ptmagicInstance.PairsLines)
                {
                    if (pairsLine.IndexOf("PTMagic_SingleMarketSettings", StringComparison.InvariantCultureIgnoreCase) > -1)
                    {
                        // Single Market Settings will get overwritten every single run => crop the lines
                        removedPairsSingleMarketSettings = true;
                        break;
                    }
                    else
                    {
                        string newPairsLine = pairsLine;

                        cleanedUpPairsLines.Add(newPairsLine);
                    }
                }

                bool removedDCASingleMarketSettings = false;
                foreach (string dcaLine in ptmagicInstance.DCALines)
                {
                    if (dcaLine.IndexOf("PTMagic_SingleMarketSettings", StringComparison.InvariantCultureIgnoreCase) > -1)
                    {
                        // Single Market Settings will get overwritten every single run => crop the lines
                        removedDCASingleMarketSettings = true;
                        break;
                    }
                    else
                    {
                        string newDCALine = dcaLine;

                        cleanedUpDCALines.Add(newDCALine);
                    }
                }

                bool removedIndicatorsSingleMarketSettings = false;
                foreach (string indicatorsLine in ptmagicInstance.IndicatorsLines)
                {
                    if (indicatorsLine.IndexOf("PTMagic_SingleMarketSettings", StringComparison.InvariantCultureIgnoreCase) > -1)
                    {
                        // Single Market Settings will get overwritten every single run => crop the lines
                        removedIndicatorsSingleMarketSettings = true;
                        break;
                    }
                    else
                    {
                        string newIndicatorsLine = indicatorsLine;

                        cleanedUpIndicatorsLines.Add(newIndicatorsLine);
                    }
                }

                ptmagicInstance.PairsLines      = cleanedUpPairsLines;
                ptmagicInstance.DCALines        = cleanedUpDCALines;
                ptmagicInstance.IndicatorsLines = cleanedUpIndicatorsLines;

                result = removedPairsSingleMarketSettings && removedDCASingleMarketSettings && removedIndicatorsSingleMarketSettings;
            }
            catch (Exception ex)
            {
                ptmagicInstance.Log.DoLogCritical("Critical error while writing settings!", ex);
            }

            return(result);
        }
Beispiel #4
0
        public static void CompileSingleMarketProperties(PTMagic ptmagicInstance, Dictionary <string, List <string> > matchedTriggers)
        {
            try
            {
                List <string> globalPairsLines      = new List <string>();
                List <string> globalDCALines        = new List <string>();
                List <string> globalIndicatorsLines = new List <string>();

                List <string> newPairsLines      = new List <string>();
                List <string> newDCALines        = new List <string>();
                List <string> newIndicatorsLines = new List <string>();

                foreach (string pairsLine in ptmagicInstance.PairsLines)
                {
                    if (pairsLine.IndexOf("PTMagic_SingleMarketSettings", StringComparison.InvariantCultureIgnoreCase) > -1)
                    {
                        // Single Market Settings will get overwritten every single run => crop the lines
                        break;
                    }
                    else
                    {
                        string globalPairsLine = pairsLine;

                        globalPairsLines.Add(globalPairsLine);
                    }
                }

                newPairsLines.Add("# PTMagic_SingleMarketSettings - Written on " + DateTime.Now.ToString());
                newPairsLines.Add("# ########################################################################");
                newPairsLines.Add("");

                foreach (string dcaLine in ptmagicInstance.DCALines)
                {
                    if (dcaLine.IndexOf("PTMagic_SingleMarketSettings", StringComparison.InvariantCultureIgnoreCase) > -1)
                    {
                        // Single Market Settings will get overwritten every single run => crop the lines
                        break;
                    }
                    else
                    {
                        string globalDCALine = dcaLine;

                        globalDCALines.Add(globalDCALine);
                    }
                }

                newDCALines.Add("# PTMagic_SingleMarketSettings - Written on " + DateTime.Now.ToString());
                newDCALines.Add("# ########################################################################");
                newDCALines.Add("");

                foreach (string indicatorsLine in ptmagicInstance.IndicatorsLines)
                {
                    if (indicatorsLine.IndexOf("PTMagic_SingleMarketSettings", StringComparison.InvariantCultureIgnoreCase) > -1)
                    {
                        // Single Market Settings will get overwritten every single run => crop the lines
                        break;
                    }
                    else
                    {
                        string globalIndicatorsLine = indicatorsLine;

                        globalIndicatorsLines.Add(globalIndicatorsLine);
                    }
                }

                Dictionary <string, string> globalPairsProperties      = SettingsHandler.GetPropertiesAsDictionary(globalPairsLines);
                Dictionary <string, string> globalDCAProperties        = SettingsHandler.GetPropertiesAsDictionary(globalDCALines);
                Dictionary <string, string> globalIndicatorsProperties = SettingsHandler.GetPropertiesAsDictionary(globalIndicatorsLines);

                newIndicatorsLines.Add("# PTMagic_SingleMarketSettings - Written on " + DateTime.Now.ToString());
                newIndicatorsLines.Add("# ########################################################################");
                newIndicatorsLines.Add("");

                foreach (string marketPair in ptmagicInstance.TriggeredSingleMarketSettings.Keys.OrderBy(k => k))
                {
                    Dictionary <string, object> pairsPropertiesToApply      = new Dictionary <string, object>();
                    Dictionary <string, object> dcaPropertiesToApply        = new Dictionary <string, object>();
                    Dictionary <string, object> indicatorsPropertiesToApply = new Dictionary <string, object>();

                    // Build Properties as a whole list so that a single coin also has only one block with single market settings applied to it
                    foreach (SingleMarketSetting setting in ptmagicInstance.TriggeredSingleMarketSettings[marketPair])
                    {
                        ptmagicInstance.Log.DoLogInfo("Building single market settings '" + setting.SettingName + "' for '" + marketPair + "'...");

                        foreach (string settingPairsProperty in setting.PairsProperties.Keys)
                        {
                            if (!pairsPropertiesToApply.ContainsKey(settingPairsProperty))
                            {
                                pairsPropertiesToApply.Add(settingPairsProperty, setting.PairsProperties[settingPairsProperty]);
                            }
                            else
                            {
                                pairsPropertiesToApply[settingPairsProperty] = setting.PairsProperties[settingPairsProperty];
                            }
                        }

                        foreach (string settingDCAProperty in setting.DCAProperties.Keys)
                        {
                            if (!dcaPropertiesToApply.ContainsKey(settingDCAProperty))
                            {
                                dcaPropertiesToApply.Add(settingDCAProperty, setting.DCAProperties[settingDCAProperty]);
                            }
                            else
                            {
                                dcaPropertiesToApply[settingDCAProperty] = setting.DCAProperties[settingDCAProperty];
                            }
                        }

                        foreach (string settingIndicatorsProperty in setting.IndicatorsProperties.Keys)
                        {
                            if (!indicatorsPropertiesToApply.ContainsKey(settingIndicatorsProperty))
                            {
                                indicatorsPropertiesToApply.Add(settingIndicatorsProperty, setting.IndicatorsProperties[settingIndicatorsProperty]);
                            }
                            else
                            {
                                indicatorsPropertiesToApply[settingIndicatorsProperty] = setting.IndicatorsProperties[settingIndicatorsProperty];
                            }
                        }

                        ptmagicInstance.Log.DoLogInfo("Built single market settings '" + setting.SettingName + "' for '" + marketPair + "'.");
                    }

                    newPairsLines      = SettingsHandler.BuildPropertyLinesForSingleMarketSetting(ptmagicInstance.LastRuntimeSummary.MainMarket, marketPair, ptmagicInstance.TriggeredSingleMarketSettings[marketPair], pairsPropertiesToApply, matchedTriggers, globalPairsProperties, newPairsLines, ptmagicInstance.PTMagicConfiguration, ptmagicInstance.Log);
                    newDCALines        = SettingsHandler.BuildPropertyLinesForSingleMarketSetting(ptmagicInstance.LastRuntimeSummary.MainMarket, marketPair, ptmagicInstance.TriggeredSingleMarketSettings[marketPair], dcaPropertiesToApply, matchedTriggers, globalDCAProperties, newDCALines, ptmagicInstance.PTMagicConfiguration, ptmagicInstance.Log);
                    newIndicatorsLines = SettingsHandler.BuildPropertyLinesForSingleMarketSetting(ptmagicInstance.LastRuntimeSummary.MainMarket, marketPair, ptmagicInstance.TriggeredSingleMarketSettings[marketPair], indicatorsPropertiesToApply, matchedTriggers, globalIndicatorsProperties, newIndicatorsLines, ptmagicInstance.PTMagicConfiguration, ptmagicInstance.Log);
                }

                // Combine global settings lines with single market settings lines
                globalPairsLines.AddRange(newPairsLines);
                globalDCALines.AddRange(newDCALines);
                globalIndicatorsLines.AddRange(newIndicatorsLines);

                ptmagicInstance.PairsLines      = globalPairsLines;
                ptmagicInstance.DCALines        = globalDCALines;
                ptmagicInstance.IndicatorsLines = globalIndicatorsLines;
            }
            catch (Exception ex)
            {
                ptmagicInstance.Log.DoLogCritical("Critical error while writing settings!", ex);
                throw (ex);
            }
        }
Beispiel #5
0
        public static void BuildPropertyLines(string fileType, PTMagic ptmagicInstance, GlobalSetting setting)
        {
            List <string> result = new List <string>();

            List <string> fileLines = (List <string>)ptmagicInstance.GetType().GetProperty(fileType + "Lines").GetValue(ptmagicInstance, null);

            Dictionary <string, object> properties = (Dictionary <string, object>)setting.GetType().GetProperty(fileType + "Properties").GetValue(setting, null);

            if (properties != null)
            {
                // Building Properties
                if (!setting.SettingName.Equals(ptmagicInstance.DefaultSettingName, StringComparison.InvariantCultureIgnoreCase) && ptmagicInstance.PTMagicConfiguration.GeneralSettings.Application.AlwaysLoadDefaultBeforeSwitch && !properties.ContainsKey("File"))
                {
                    // Load default settings as basis for the switch
                    GlobalSetting defaultSetting = ptmagicInstance.PTMagicConfiguration.AnalyzerSettings.GlobalSettings.Find(a => a.SettingName.Equals(ptmagicInstance.DefaultSettingName, StringComparison.InvariantCultureIgnoreCase));
                    if (defaultSetting != null)
                    {
                        Dictionary <string, object> defaultProperties = new Dictionary <string, object>();
                        switch (fileType.ToLower())
                        {
                        case "pairs":
                            defaultProperties = defaultSetting.PairsProperties;
                            break;

                        case "dca":
                            defaultProperties = defaultSetting.DCAProperties;
                            break;

                        case "inidcators":
                            defaultProperties = defaultSetting.IndicatorsProperties;
                            break;
                        }

                        if (defaultProperties.ContainsKey("File"))
                        {
                            fileLines = SettingsFiles.GetPresetFileLinesAsList(defaultSetting.SettingName, defaultProperties["File"].ToString(), ptmagicInstance.PTMagicConfiguration);
                        }
                    }
                }
                else
                {
                    // Check if settings are configured in a seperate file
                    if (properties.ContainsKey("File"))
                    {
                        fileLines = SettingsFiles.GetPresetFileLinesAsList(setting.SettingName, properties["File"].ToString(), ptmagicInstance.PTMagicConfiguration);
                    }
                }

                foreach (string line in fileLines)
                {
                    if (line.IndexOf("PTMagic_ActiveSetting", StringComparison.InvariantCultureIgnoreCase) > -1)
                    {
                        // Setting current active setting
                        result.Add("# PTMagic_ActiveSetting = " + setting.SettingName);
                    }
                    else if (line.IndexOf("PTMagic_LastChanged", StringComparison.InvariantCultureIgnoreCase) > -1)
                    {
                        // Setting last change datetime
                        result.Add("# PTMagic_LastChanged = " + DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToShortTimeString());
                    }
                    else if (line.IndexOf("PTMagic_SingleMarketSettings", StringComparison.InvariantCultureIgnoreCase) > -1)
                    {
                        // Single Market Settings will get overwritten every single run => crop the lines
                        break;
                    }
                    else
                    {
                        // Writing property items
                        int oldResultCount = result.Count;
                        if (properties != null)
                        {
                            foreach (string settingProperty in properties.Keys)
                            {
                                result = SettingsHandler.BuildPropertyLine(result, setting.SettingName, line, properties, settingProperty);
                            }
                        }
                        if (oldResultCount == result.Count)
                        {
                            result.Add(line);
                        }
                    }
                }
            }

            ptmagicInstance.GetType().GetProperty(fileType + "Lines").SetValue(ptmagicInstance, result);
        }
Beispiel #6
0
 public static void CompileProperties(PTMagic ptmagicInstance, GlobalSetting setting)
 {
     SettingsHandler.BuildPropertyLines("Pairs", ptmagicInstance, setting);
     SettingsHandler.BuildPropertyLines("DCA", ptmagicInstance, setting);
     SettingsHandler.BuildPropertyLines("Indicators", ptmagicInstance, setting);
 }
Beispiel #7
0
        public static void BuildPropertyLines(string fileType, PTMagic ptmagicInstance, GlobalSetting setting, DateTime settingLastChanged)
        {
            bool          headerLinesExist = false;
            List <string> result           = new List <string>();
            List <string> fileLines        = null;

            // Analsye the properties for the setting and apply
            Dictionary <string, object> properties = (Dictionary <string, object>)setting.GetType().GetProperty(fileType + "Properties").GetValue(setting, null);

            // Building Properties
            if (properties == null || !properties.ContainsKey("File"))
            {
                // Load default settings as basis for the switch
                GlobalSetting defaultSetting = ptmagicInstance.PTMagicConfiguration.AnalyzerSettings.GlobalSettings.Find(a => a.SettingName.Equals(ptmagicInstance.DefaultSettingName, StringComparison.InvariantCultureIgnoreCase));
                Dictionary <string, object> defaultProperties = (Dictionary <string, object>)defaultSetting.GetType().GetProperty(fileType + "Properties").GetValue(defaultSetting, null);

                if (defaultProperties.ContainsKey("File"))
                {
                    // Load the default settings file lines
                    fileLines = SettingsFiles.GetPresetFileLinesAsList(defaultSetting.SettingName, defaultProperties["File"].ToString(), ptmagicInstance.PTMagicConfiguration);
                }
                else
                {
                    // No preset file defined, this is a bad settings file!
                    throw new ApplicationException(string.Format("No 'File' setting found in the '{0}Properties' of the 'Default' setting section in the 'settings.analyzer.json' file; this must be defined!", fileType));
                }
            }
            else
            {
                // Settings are configured in a seperate file
                fileLines = SettingsFiles.GetPresetFileLinesAsList(setting.SettingName, properties["File"].ToString(), ptmagicInstance.PTMagicConfiguration);
            }

            // Check for PTM header in preset file
            // Loop through config line by line reprocessing where required.
            foreach (string line in fileLines)
            {
                if (line.IndexOf("PTMagic_ActiveSetting", StringComparison.InvariantCultureIgnoreCase) > -1)
                {
                    // Setting current active setting
                    result.Add("# PTMagic_ActiveSetting = " + setting.SettingName);
                    headerLinesExist = true;
                }
                else if (line.IndexOf("PTMagic_LastChanged", StringComparison.InvariantCultureIgnoreCase) > -1)
                {
                    // Setting last change datetime
                    result.Add("# PTMagic_LastChanged = " + settingLastChanged.ToShortDateString() + " " + settingLastChanged.ToShortTimeString());
                }
                else if (line.IndexOf("PTMagic_SingleMarketSettings", StringComparison.InvariantCultureIgnoreCase) > -1)
                {
                    // Single Market Settings will get overwritten every single run => crop the lines
                    break;
                }
                else if (IsPropertyLine(line))
                {
                    // We have got a property line
                    if (properties != null)
                    {
                        bool madeSubstitution = false;

                        foreach (string settingProperty in properties.Keys)
                        {
                            if (madeSubstitution)
                            {
                                // We've made a substitution so no need to process the rest of the properties
                                break;
                            }
                            else
                            {
                                madeSubstitution = SettingsHandler.BuildPropertyLine(result, setting.SettingName, line, properties, settingProperty);
                            }
                        }

                        if (!madeSubstitution)
                        {
                            // No substitution made, so simply copy the line
                            result.Add(line);
                        }
                    }
                }
                else
                {
                    // Non property line, just copy it
                    result.Add(line);
                }
            }

            // Write header lines if required
            if (!headerLinesExist)
            {
                WriteHeaderLines(setting.SettingName, settingLastChanged, result);
            }

            // Save lines to current context for the file type
            ptmagicInstance.GetType().GetProperty(fileType + "Lines").SetValue(ptmagicInstance, result);
        }