株式の売買シグナルを生成するプログラムを作成しました。また、さまざまなシグナルをテストし、各取引のリターンを提供するロジックも作成しました。
次のステップは、長期間にわたって戦略とそのルールをシミュレートすることです。すべての情報はテキストファイルにエクスポートされ、SQL Serverデータベースのテーブルにインポートされます。 StartCapital
、CurrentCapital
、NumberOfPositions
、PositionsLeft
などの変数を宣言する必要があることに気づきました。列の1つはBuyPrice
という名前で、購入する時期と価格を示します。これが発生した場合、NumberOfPositions
は1だけ減算されます。
列SellPrice
は、いつ、どの価格に売るかを示します。これが発生した場合、NumberOfPositions
を1つ追加する必要があります。 NumberOfPositions
の最大値は5で、最小値は0です。望ましい結果は、CurrentCapital
がどのように展開されるかを確認することです。
フォームを開始するための入力とSQLコードの種類に感謝します。
ループする別の方法があります。多くの回答でカウンターが1ずつ増加するのを見てきましたが、私の経験では、データセット内のIDにギャップがないとは限りません。
ここに私がよく使う解決策があります:
declare @idColumn int
select @idColumn = min( TableID ) from Table
while @idColumn is not null
begin
/*
Do all the stuff that you need to do
*/
select @idColumn = min( TableID ) from Table where TableID > @idColumn
end
質問のキャプションに基づいています。これは、TABLE
型の変数を使用してテーブルの各行をループする方法です。
DECLARE
@counter INT = 1,
@max INT = 0
-- Declare a variable of type TABLE. It will be used as a temporary table.
DECLARE @myTable TABLE (
[Id] int identity,
[Column1] nvarchar(max),
[Column2] nvarchar(100)
)
-- Insert your required data in the variable of type TABLE
INSERT INTO @myTable
SELECT Column1, Column2
FROM [dbo].[YOUR_DATABASE_TABLE]
-- Initialize the @max variable. We'll use thie variable in the next WHILE loop.
SELECT @max = COUNT(ID) FROM @myTable
-- Loop
WHILE @counter <= @max
BEGIN
-- Do whatever you want with each row in your table variable filtering by the Id column
SELECT Column1, Column2
FROM @myTable
WHERE Id = @counter
SET @counter = @counter + 1
END