mirror of
https://github.com/mihakralj/QuanTAlib.git
synced 2026-08-15 09:08:04 +00:00
- Remove 'C# Implementation Considerations' sections from 34 indicator .md files - Delete 29 temp PowerShell scripts (_fix_mojibake.ps1, _hex_scan.ps1, etc.) - Move test files into tests/ subdirectories for consistent project structure - Add trader-focused bullet points to indicator documentation
133 lines
3.5 KiB
C#
133 lines
3.5 KiB
C#
using TradingPlatform.BusinessLayer;
|
|
using Xunit;
|
|
|
|
namespace QuanTAlib.Tests;
|
|
|
|
public class CciIndicatorTests
|
|
{
|
|
[Fact]
|
|
public void CciIndicator_Constructor_SetsDefaultPeriod()
|
|
{
|
|
var indicator = new CciIndicator();
|
|
Assert.Equal(20, indicator.Period);
|
|
}
|
|
|
|
[Fact]
|
|
public void CciIndicator_DefaultName_IsCCI()
|
|
{
|
|
var indicator = new CciIndicator();
|
|
Assert.Equal("CCI", indicator.Name);
|
|
}
|
|
|
|
[Fact]
|
|
public void CciIndicator_SeparateWindow_IsTrue()
|
|
{
|
|
var indicator = new CciIndicator();
|
|
Assert.True(indicator.SeparateWindow);
|
|
}
|
|
|
|
[Fact]
|
|
public void CciIndicator_MinHistoryDepths_EqualsPeriod()
|
|
{
|
|
var indicator = new CciIndicator { Period = 14 };
|
|
Assert.Equal(14, indicator.MinHistoryDepths);
|
|
}
|
|
|
|
[Fact]
|
|
public void CciIndicator_Initialize_CreatesWithCustomPeriod()
|
|
{
|
|
var indicator = new CciIndicator { Period = 14 };
|
|
indicator.Initialize();
|
|
|
|
Assert.Equal(14, indicator.Period);
|
|
}
|
|
|
|
[Fact]
|
|
public void CciIndicator_OnUpdate_ProcessesHistoricalData()
|
|
{
|
|
var indicator = new CciIndicator { Period = 10 };
|
|
var historicalData = new HistoricalData();
|
|
|
|
// Add OHLC bars
|
|
var baseTime = DateTime.UtcNow.Date;
|
|
for (int i = 0; i < 30; i++)
|
|
{
|
|
historicalData.AddBar(
|
|
baseTime.AddDays(i),
|
|
open: 100 + i,
|
|
high: 102 + i,
|
|
low: 98 + i,
|
|
close: 101 + i,
|
|
volume: 10000);
|
|
}
|
|
|
|
indicator.HistoricalData = historicalData;
|
|
indicator.Initialize();
|
|
|
|
// Process all bars
|
|
for (int i = 0; i < historicalData.Count; i++)
|
|
{
|
|
var args = new UpdateArgs(UpdateReason.HistoricalBar);
|
|
indicator.ProcessUpdate(args);
|
|
}
|
|
|
|
// Should complete without error
|
|
Assert.True(true);
|
|
}
|
|
|
|
[Fact]
|
|
public void CciIndicator_OnUpdate_ProcessesNewBar()
|
|
{
|
|
var indicator = new CciIndicator { Period = 10 };
|
|
var historicalData = new HistoricalData();
|
|
|
|
var baseTime = DateTime.UtcNow.Date;
|
|
for (int i = 0; i < 20; i++)
|
|
{
|
|
historicalData.AddBar(
|
|
baseTime.AddDays(i),
|
|
open: 100 + i,
|
|
high: 102 + i,
|
|
low: 98 + i,
|
|
close: 101 + i,
|
|
volume: 10000);
|
|
}
|
|
|
|
indicator.HistoricalData = historicalData;
|
|
indicator.Initialize();
|
|
|
|
// Simulate new bar
|
|
var newBarArgs = new UpdateArgs(UpdateReason.NewBar);
|
|
indicator.ProcessUpdate(newBarArgs);
|
|
|
|
Assert.True(true);
|
|
}
|
|
|
|
[Fact]
|
|
public void CciIndicator_Description_IsSet()
|
|
{
|
|
var indicator = new CciIndicator();
|
|
Assert.True(indicator.Description.Contains("Commodity Channel Index", StringComparison.Ordinal) ||
|
|
indicator.Description.Contains("CCI", StringComparison.Ordinal) ||
|
|
indicator.Description.Contains("momentum", StringComparison.Ordinal));
|
|
}
|
|
|
|
[Fact]
|
|
public void CciIndicator_PeriodRange_IsValidated()
|
|
{
|
|
// Period should accept values from 2 to 200
|
|
var indicator = new CciIndicator { Period = 2 };
|
|
Assert.Equal(2, indicator.Period);
|
|
|
|
indicator.Period = 200;
|
|
Assert.Equal(200, indicator.Period);
|
|
}
|
|
|
|
[Fact]
|
|
public void CciIndicator_ImplementsIWatchlistIndicator()
|
|
{
|
|
var indicator = new CciIndicator();
|
|
Assert.IsAssignableFrom<IWatchlistIndicator>(indicator);
|
|
}
|
|
}
|