背景
我們?cè)?數(shù)字資產(chǎn)量化中的三角套利策略 這篇圖文中詳細(xì)的介紹了三角套利的原理以及代碼實(shí)現(xiàn)。 在 進(jìn)一步完善自動(dòng)化交易系統(tǒng) - 02 和 進(jìn)一步完善自動(dòng)化交易系統(tǒng) - 03 中利用配置文件的方法,擴(kuò)充至七個(gè)三角套利模型。
現(xiàn)在的問(wèn)題是需要把應(yīng)用程序和配置文件分別存儲(chǔ)在七個(gè)不同的文件夾內(nèi),需要手動(dòng)啟動(dòng)七個(gè)程序來(lái)運(yùn)行這七個(gè)三角套利的模型,顯得很繁瑣,是否能夠找到一種方式,同時(shí)啟動(dòng)七個(gè)模型呢?
技術(shù)分析
答案是一定的。程序猿不滿(mǎn)足用戶(hù)的需求,還能稱(chēng)為程序猿么,雖然用戶(hù)就是自己!哈哈!
<b>首先</b>,把三角套利的程序TriangularArbitrage.exe放置在一個(gè)專(zhuān)門(mén)的文件夾AppFile中。

<b>其次</b>,把配置文件放置在另一個(gè)專(zhuān)門(mén)的文件夾iniFile中。

<b>再次</b>,修改三角套利的程序,該程序把配置文件的路徑作為參數(shù)。這樣,傳入不同的配置文件,既可執(zhí)行不同的三角套利模型。
<b>最后</b>,寫(xiě)一個(gè)啟動(dòng)程序,該啟動(dòng)程序的邏輯就是在上面指定的文件夾iniFile中讀取配置文件,根據(jù)配置文件的名稱(chēng)獲取主窗體的名稱(chēng),判斷該主窗體是否已經(jīng)運(yùn)行,如果正在運(yùn)行,則結(jié)束該主窗體的進(jìn)程。把讀取的配置文件路徑作為參數(shù)調(diào)用上面指定文件夾AppFile中的程序,即完成了同時(shí)啟動(dòng)不同三角套利模型的任務(wù)。

代碼實(shí)現(xiàn)
<b>1. 修改三角套利的程序</b>
private static LSGOINIControlFacade _iniControl;
private static string _one;
private static string _usdt;
private static string _eos;
static void Main(string[] args)
{
string appName = "TriangularArbitrage";
string version = "2019.07.25.01";
string inifileName;
if (args.Length == 0)
{
Console.WriteLine(@"需要輸入配置文件的路徑");
inifileName = Console.ReadLine();
if (File.Exists(inifileName) == false)
{
Console.WriteLine(@"配置文件不存在!");
Console.ReadLine();
return;
}
}
else
{
inifileName = args[0];
}
_iniControl = new LSGOINIControlFacade(inifileName);
string title = _iniControl.GetSetting(appName, "App", "Title", string.Empty);
_one = _iniControl.GetSetting(appName, "App", "One", string.Empty);
_usdt = _iniControl.GetSetting(appName, "App", "Usdt", string.Empty);
_eos = _iniControl.GetSetting(appName, "App", "Eos", string.Empty);
if (string.IsNullOrEmpty(title) || string.IsNullOrEmpty(_one)
|| string.IsNullOrEmpty(_usdt) ||
string.IsNullOrEmpty(_eos))
{
Console.WriteLine(@"讀取配置文件錯(cuò)誤");
Console.ReadLine();
return;
}
Console.Title = title;
Console.WriteLine(@"三角套利版本號(hào):{0}", version);
//...
}
<b>2. 完成啟動(dòng)程序</b>
static void Main(string[] args)
{
List<string> lstFiles = Directory.GetFiles(@".\iniFile").ToList();
lstFiles = lstFiles.Where(a => Path.GetExtension(a) == ".ini").ToList();
List<string> lstTitle = new List<string>();
for (int i = 0; i < lstFiles.Count; i++)
{
string title = Path.GetFileName(lstFiles[i]);
if (title != null)
{
int index = title.IndexOf("_Registry", StringComparison.Ordinal);
title = title.Substring(0, index)+" 三角套利系統(tǒng)";
lstTitle.Add(title);
}
}
Process[] p = Process.GetProcesses();
for (int i = 0; i < lstTitle.Count; i++)
{
List<Process> lstp = p.Where(a => a.MainWindowTitle == lstTitle[i]).ToList();
if (lstp.Count != 0)
{
for (int j = 0; j < lstp.Count; j++)
{
lstp[j].Kill();
}
Thread.Sleep(1000);
}
}
for (int i = 0; i < lstFiles.Count; i++)
{
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = @".\AppFile\TriangularArbitrage.exe";
startInfo.Arguments = lstFiles[i];
startInfo.WindowStyle = ProcessWindowStyle.Minimized;
Process.Start(startInfo);
Thread.Sleep(1000);
}
Console.WriteLine("三角套利程序啟動(dòng)完畢!");
Console.ReadLine();
}
總結(jié)
好了,到此為止,就解決了同時(shí)啟動(dòng)七個(gè)模型的問(wèn)題。提升了啟動(dòng)三角套利程序的效率,避免了每次都要檢查 多啟動(dòng) 或者 沒(méi)啟動(dòng) 的問(wèn)題。今天就到這里吧,最后放一個(gè)三角套利運(yùn)行結(jié)果的截圖,See You!
相關(guān)圖文:
- 資料分享:數(shù)學(xué)建模資料分享 -- 圖論部分
- 資料分享:數(shù)學(xué)建模資料分享 -- 神經(jīng)網(wǎng)絡(luò)部分
- 如何利用 C# 實(shí)現(xiàn) K 最鄰近算法?
- 如何利用 C# 實(shí)現(xiàn) K-D Tree 結(jié)構(gòu)?
- 如何利用 C# + KDTree 實(shí)現(xiàn) K 最鄰近算法?
- 如何利用 C# 對(duì)神經(jīng)網(wǎng)絡(luò)模型進(jìn)行抽象?
- 如何利用 C# 實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)的感知器模型?
- 如何利用 C# 實(shí)現(xiàn) Delta 學(xué)習(xí)規(guī)則?
- 如何利用 C# 實(shí)現(xiàn) 誤差反向傳播 學(xué)習(xí)規(guī)則?
- 如何利用 C# 爬取帶 Token 驗(yàn)證的網(wǎng)站數(shù)據(jù)?
- 如何利用 C# 向 Access 數(shù)據(jù)庫(kù)插入大量數(shù)據(jù)?
- 如何利用 C# + Python 破解貓眼電影的反爬蟲(chóng)機(jī)制?