読み取り専用

フォーラムは現在、読み取り専用のアーカイブとなっています。.

バグ報告やプラットフォームに関する質問はこちら → [email protected]

私たちのコミュニティはDiscordとYouTubeで活動しています。ぜひ参加してください!

ご参加ください Discord YouTube

インストゥルメントごとの同時トレード数上限を許可するwhatif用スニペット

1件の返信

マビ

Customer、bbp_participant、community、sq-ultimate、252件の返信。.

プロフィールを表示

7年前 #238012

本日、1日あたりの最大トレード数をテストする可能性があります。1日1トレードに設定しても、場合によっては1日3トレード実行されることがあるため、言われた通りに機能するかどうかは確信が持てません。ポートフォリオを構築する際、同じ銘柄に対する相関関係は常に問題になります。トレードは非常に近いタイミングで行われますが、エグジットが異なるため、QA(QuantAnalyzer)はそれらが無相関であると判断してしまいますが、実際には、特にドローダウンの期間中において非常に高い相関があります。コピートレーダーを使用することで、同じ銘柄での同時トレードを1回だけに制限する方法はありますが、QAには、その場合のパフォーマンスがどうなるかを検証するための「もしも(what if)」機能がありません。.

大型ポートフォリオのドローダウンを大幅に軽減できる機能だと思われるため、この機能について誰かにお手伝いいただければ幸いです。availのリアル口座でこれをテストしてきましたが、確認できることとして、これを使用していない口座と比較して、資産曲線(EQカーブ)がはるかに滑らかになり、ドローダウンが大幅に小さくなり、利益も向上しています。.

0

ステアノ

カスタマー、bbp_participant、コミュニティ、379件の返信。.

プロフィールを表示

5年前 #270964

What-if分析で同時にオープンできるトレードの数を制限するためのコードはこちらです。私はプログラマーではないので、最も効率的な方法でも最高のやり方でもありません。しかし、機能する方法ではあるので、誰かの役に立つかもしれないと思いシェアします:

 

package com.strategyquant.extend.WhatIf;

import java.util.Collections;
import java.util.Date;
import java.util.Iterator;
import java.util.Arrays;

import com.strategyquant.lib.comparators.OrderComparatorByOpenTime;
import com.strategyquant.lib.language.L;
import com.strategyquant.lib.results.SQOrder;
import com.strategyquant.lib.results.SQOrderList;
import com.strategyquant.lib.snippets.WhatIf;
import com.strategyquant.lib.time.SQTime;

public class TakeMaxTradesAtOneTime extends WhatIf
{

public TakeMaxTradesAtOneTime()
{
setName(L.t(“一度に行う最大トレード数を設定”));

addIntParameter(“Trades”, L.t(“トレード”), 1, 1, Integer.MAX_VALUE, 1);
setFormatedName(L.t(“一度に最大 {Trades} 件のトレードを実行”));
}

public void filter(SQOrderList originalOrders) throws Exception
{
int trades = getIntParameterValue(“Trades”);
long[] Closedatetime = new long[1];
int FirstRun = 0;

Collections.sort(originalOrders, new OrderComparatorByOpenTime());

for(Iterator i = originalOrders.listIterator(); i.hasNext();)
{
SQOrder order = i.next();

if(order.isBalanceOrder())
続ける。;
long closedatetime = order.CloseTime;

if (FirstRun == 0)
{
Closedatetime[0] = closedatetime;
FirstRun = 1;
}
int count = Closedatetime.length;
if (count <= trades)
{
Closedatetime = Arrays.copyOf(Closedatetime, Closedatetime.length + 1);
Closedatetime[Closedatetime.length – 1] = closedatetime;
}
その他
{
Arrays.sort(Closedatetime);
long opendatetime = order.OpenTime;
for (int j = 0; j < Closedatetime.length; j++)
{
if (opendatetime > Closedatetime[j])
Closedatetime = removeElement(Closedatetime,j);
}
count = Closedatetime.length;
if (count <= trades)
{
Closedatetime = Arrays.copyOf(Closedatetime, Closedatetime.length + 1);
Closedatetime[Closedatetime.length – 1] = closedatetime;
}
その他
i.remove();
}
}
}

private long[] removeElement(long[] arr, int index)
{
long[] anotherArray = new long[arr.length – 1];
for (int l = 0, k = 0; l < arr.length; l++)
{
if (l == index)
続ける。;
anotherArray[k] = arr[l];
k++;
}
return anotherArray;
}
}

0

1件の返信を表示中 - 1 - 1件目 (全1件中)