﻿════════════════════════════════════════════════
  MA Cross 20/50（損切り20pips / 利確60pips）
  Forex Tester Online 用 ストラテジー サンプル
════════════════════════════════════════════════


■ 最初にお読みください

同梱の「ma-cross-sl20-tp60.js」は、ダブルクリックしないでください。

Windows でダブルクリックすると、下記のようなエラーが表示されます。

　「Windows Script Host」／エラーコード 800A03EB

これは Windows がファイルを実行しようとして出しているもので、
ファイルが壊れているわけではありません。
このファイルは Forex Tester Online の画面からアップロードして使います。


■ このサンプルの売買ルール

　エントリー
　　・ゴールデンクロス（20MA が 50MA を上抜け）→ 買い
　　・デッドクロス　　（20MA が 50MA を下抜け）→ 売り

　エグジット（決済）
　　・利確　60 pips に到達
　　・損切り 20 pips に到達
　　・反対のクロスが出た場合は、決済して反対方向へ入り直す

　　　※ 3つ目があるため、損切りにも利確にも届かないまま
　　　　 決済されることがあります。その場合の損益は小さくなります。
　　　　 不具合ではありません。

　判定は確定した足で行い、1本の足につき1回だけ処理します。
　形成中の足で判定すると、同じ足の中でシグナルが出たり消えたりするためです。

　買いと売りを同時に保有することはありません。


■ 使い方

【1】ZIP を展開する

【2】Forex Tester Online にログインする

　　　https://app.forextester.com/

【3】プロジェクトを開く（または新規作成する）

【4】「Strategies」タブ →「Upload Strategy」

【5】「ma-cross-sl20-tp60.js」を選択してアップロード

　　　※ source フォルダの中のファイルではありません。
　　　　 ZIP を展開した直下にある .js ファイルです。

【6】「Use Strategy」で選択し、「Apply」→「Run」

これで、移動平均が交差したところで売買が始まります。


■ 設定できる項目

　Lot size　　　　　　 ロット数（初期値 0.1）
　Fast MA period　　　 短期移動平均の期間（初期値 20）
　Slow MA period　　　 長期移動平均の期間（初期値 50）
　MA method　　　　　　移動平均の種類（初期値 SMA）
　Stop loss (pips)　　 損切り幅（初期値 20／0 で無効）
　Take profit (pips)　 利確幅（初期値 60／0 で無効）
　Magic number　　　　 このストラテジーの識別番号（初期値 20050）

　※ Fast MA period は Slow MA period より小さい値にしてください。
　※ Lot size を 0 にすると発注されません。


■ 中身を見たい・改造したい場合

source フォルダに、変換前のソースコード一式が入っています。

　source/src/index.ts　　　 ストラテジー本体（ここを編集します）
　source/package.json　　　 必要な部品の一覧
　source/tsconfig.json　　　変換の設定
　source/webpack.config.js　変換の設定

【ビルドの手順】

　1. Node.js をインストールします（推奨版 LTS）
　　　https://nodejs.org/en

　2. source フォルダを、お使いのエディターで開きます
　　　（VS Code でも Cursor でも構いません）

　3. ターミナルで、次の2つを順に実行します

　　　npm install
　　　npm run build

　4. dist フォルダに「ma-cross-sl20-tp60.js」が生成されます
　　　これをアップロードしてください

【ご注意】

　dist フォルダには、変換途中のファイル（index.js）も一緒に作られます。
　アップロードするのは、プロジェクト名が付いた
　「ma-cross-sl20-tp60.js」の方です。
　index.js をアップロードしても動作しません。

【Windows でエラーが出た場合】

　npm install で下記のエラーが出ることがあります。

　　cannot be loaded because running scripts is disabled on this system.

　その場合は、ターミナルで次を実行してから、もう一度お試しください。

　　Set-ExecutionPolicy RemoteSigned -Scope CurrentUser


■ 開発される方へ：PlaceOrder の引数について

公式ドキュメントの PlaceOrder は引数が9個と記載されていますが、
実際の API（forex-tester-custom-strategy-api 2.0.1）は8個です。

　実際の定義：
　　PlaceOrder(Symbol, OperationType, price, LotSize,
　　　　　　　 StopLoss, TakeProfit, Comment, MagicNumber)

ドキュメントどおりに書くと、ロット数が価格の位置に、
損切りが slippage の位置に入ってしまい、
注文が通らないか、損切り・利確なしで発注されます。

本サンプルは、型定義に合わせて実装しています。
ご自身で作成される際もご注意ください。


■ API のバージョンについて

本サンプルは API 2.0 系（forex-tester-custom-strategy-api 2.0.1）で作成しています。
source/package.json はそのバージョンを固定しています。

　　"forex-tester-custom-strategy-api": "2.0.1"

2026年9月10日に公開された 2.0 系では、1.5.0 から名前が変わりました。
インターネットで見つかる 1.5.0 向けのサンプルコードをそのまま貼り付けると
ビルドが通りませんので、下の対応表をご覧ください。

　　基底クラス　　　StrategyImplementation　→　Robot
　　初期化　　　　　Init()　　　　　　　　　→　OnInit()
　　名前の設定　　　setStrategyShortName　　→　SetRobotShortName
　　説明文　　　　　setStrategyDescription　→　SetRobotDescription
　　パラメーター　　createTOptValue_number + RegOption
　　　　　　　　　　　　　　　　　　　　　　→　CreateIntegerInput / CreateDoubleInput
　　移動平均　　　　iMA(...)　　　　　　　　→　GetMA(足の位置, 0, 期間, 種類, 価格)
　　売買方向　　　　TTradePositionType　　　→　OrderType
　　注文の選択　　　SelectOrder(i, 0, 0)　　→　SelectOrder(i, OrderSelectMode.POSITION,
　　　　　　　　　　　　　　　　　　　　　　　　 OrderSearchMode.TRADES)

PlaceOrder の引数は 2.0 系でも 8 個のままです。
上の「開発される方へ：PlaceOrder の引数について」をご覧ください。

■ サポート範囲について

本ファイルは、作成方法をご理解いただくためのサンプルです。
売買成績を保証するものではありません。

お客様が作成・改造されたコードの内容確認については、
サポート対象外とさせていただいております。
