[英]Need a loop to find where a certain value resides within the top 3rd, middle 3rd and bottom 3rd of a list
我正在使用 Ninjatrader 腳本來查找某個價格所在的酒吧。 到目前為止,我有一個值“價格”,它是列表中的值之一。 所以在柱內有 x 個從低到高的價格,我使用 for 循環來查找這些值。 我需要將列表從高到低排序。 計數會因酒吧而異。 所以說我在列表中有 16 個值。 我需要確定這些值的前 3 位、中位 3 位和后 1/3 位,然后一旦確定將某個“價格”與它所在的三分之一進行比較。 計數會有所不同,並且不會被 3 整除。
for ( double myPrice = Low[0]; myPrice = High[0]; myPrice += Ticksize)
{
myList.Add(myPrice);
}
從這里我需要弄清楚如何將列表分成三部分,然后檢查 ABC_Price 是否在列表的頂部、中間或底部三分之一,列表從高到低排序。
要了解哪些價格限制划定了清單的三分之一,您可以計算價格清單的 1/3 和 2/3 百分位數。
我們可以使用 0 到 1 范圍內的百分位數來計算這樣的百分位數:
public static double Percentile(IList<double> sortedValues, double percentile)
{
double realIndex = percentile * (sortedValues.Count - 1);
int index = (int)realIndex;
if (index < sortedValues.Count - 1) {
double fraction = realIndex - index;
return sortedValues[index] * (1 - fraction) + sortedValues[index + 1] * fraction;
} else {
return sortedValues[sortedValues.Count - 1];
}
}
示例: Percentile(prices, 1.0 / 3.0)
得出的價格位於按升序排序的價目表的 1/3 處。
本次測試
double[] prices = { 6.0, 10.0, 10.0, 10.0, 25.0, 30.0, 40.0, 45.0, 50.0, 55.0, 60.0, 100.0, 115.0, 250.0 };
double lowerPriceLimit = Percentile(prices, 1.0 / 3.0);
double upperPriceLimit = Percentile(prices, 2.0 / 3.0);
Console.WriteLine($"Price limits = {lowerPriceLimit:n3}, {upperPriceLimit:n3}");
印刷
Price limits = 26.667, 53.333
這些值是分數,因為列表的 1/3 和 2/3 位於實際列表位置之間。 這意味着該算法適用於任何列表大小。
通過這些計算出lowerPriceLimit
和upperPriceLimit
,您可以確定價格位於哪個 3rd
if (price <= lowerPriceLimit) {
// bottom third
} else if (price <= upperPriceLimit) {
// middle third
} else {
// top third
}
在比較中是否使用<=
或<
取決於您決定當價格等於其中一個限制時價格必須屬於哪個類別。
感謝您的建議,不幸的是它們不是我想要的。 我有多個問題需要解決:
循環查找柱內的所有價格。 我使用了一個 for 循環並將它們添加到一個列表中。
對列表進行排序。 MyList.Sort();
確定列表的計數,myCount = 除以 3。使用(十進制)Math.Round
將 List 分為 3 個部分:使用 3 個 for 循環,根據 myCount 在 List 中循環
for ( double aDouble = myList[myCount - myCount]; aDouble =
myList[TotalCount - (myCount*2))-2); aDouble += TickSize) { Bottom_List.Add(aDouble); }
5.為每個部分創建一個布爾值:
if (Bottom_List.Contains(myPrice)) BotPrice = true; 否則機器人價格=假;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.