{
  "portfolios": [
    {
      "name": "SOXL简单均线策略 (The Naked Trend)",
      "code": "soxl_naked_trend",
      "description": "用SMH相对MA20的强度信号交易SOXL。买入:RS>100(SMH在MA20上方)；卖出:RS<100(SMH跌破MA20)。使用持续状态而非瞬时交叉。",
      "strategy_definition": {
        "market_indicators": {
          "indicators": [
            { "code": "SMH" }
          ],
          "transformers": [
            {
              "name": "smh_close",
              "type": "IdentityTransformer",
              "params": {
                "indicator": "SMH",
                "field": "Close"
              }
            },
            {
              "name": "smh_ma20",
              "type": "MovingAverageTransformer",
              "params": {
                "indicator": "SMH",
                "window": 20,
                "method": "simple",
                "field": "Close"
              }
            },
            {
              "name": "smh_rs_ma20",
              "type": "RelativeStrengthTransformer",
              "params": {
                "indicator": "SMH",
                "reference": "ma",
                "window": 20,
                "field": "Close"
              }
            }
          ]
        },
        "trade_strategy": {
          "indicators": [
            {
              "id": "threshold_100",
              "type": "Constant",
              "params": { "value": 100 }
            }
          ],
          "signals": [
            {
              "id": "smh_above_ma20",
              "type": "GreaterThan",
              "inputs": [
                { "market": "SMH", "transformer": "smh_rs_ma20" },
                { "ref": "threshold_100" }
              ]
            },
            {
              "id": "smh_below_ma20",
              "type": "LessThan",
              "inputs": [
                { "market": "SMH", "transformer": "smh_rs_ma20" },
                { "ref": "threshold_100" }
              ]
            }
          ],
          "outputs": {
            "buy_signal": "smh_above_ma20",
            "sell_signal": "smh_below_ma20",
            "indicators": [
              { "id": "smh_above_ma20", "output_name": "buy_signal" },
              { "id": "smh_below_ma20", "output_name": "sell_signal" }
            ],
            "market_indicators": [
              { "market": "SMH", "transformer": "smh_close", "output_name": "smh" },
              { "market": "SMH", "transformer": "smh_ma20", "output_name": "smh_ma20" },
              { "market": "SMH", "transformer": "smh_rs_ma20", "output_name": "smh_rs" }
            ]
          }
        },
        "capital_strategy": {
          "name": "PercentCapitalStrategy",
          "params": {
            "initial_capital": 100000,
            "percents": 99
          }
        }
      },
      "symbols": [
        {"symbol": "SOXL", "name": "Semiconductor 3x Bull ETF"}
      ],
      "start_date": "2018-01-01",
      "currency": "USD",
      "market": "US",
      "commission": 0.0001,
      "update_time": "08:00"
    },
    {
      "name": "SOXL带过滤均线策略 (The Filtered Trend)",
      "code": "soxl_filtered_trend",
      "description": "用SMH相对MA200的强度信号交易SOXL。买入:RS>101(SMH有效站上MA200)；卖出:RS<99连续2天确认。参考TQQQ波动控制案例设计。",
      "strategy_definition": {
        "market_indicators": {
          "indicators": [
            { "code": "SMH" }
          ],
          "transformers": [
            {
              "name": "smh_close",
              "type": "IdentityTransformer",
              "params": {
                "indicator": "SMH",
                "field": "Close"
              }
            },
            {
              "name": "smh_ma200",
              "type": "MovingAverageTransformer",
              "params": {
                "indicator": "SMH",
                "window": 200,
                "method": "simple",
                "field": "Close"
              }
            },
            {
              "name": "smh_rs_ma200",
              "type": "RelativeStrengthTransformer",
              "params": {
                "indicator": "SMH",
                "reference": "ma",
                "window": 200,
                "field": "Close"
              }
            }
          ]
        },
        "trade_strategy": {
          "indicators": [
            {
              "id": "threshold_buy",
              "type": "Constant",
              "params": { "value": 101 }
            },
            {
              "id": "threshold_sell",
              "type": "Constant",
              "params": { "value": 99 }
            }
          ],
          "signals": [
            {
              "id": "rs_above_101",
              "type": "GreaterThan",
              "inputs": [
                { "market": "SMH", "transformer": "smh_rs_ma200" },
                { "ref": "threshold_buy" }
              ]
            },
            {
              "id": "rs_below_99",
              "type": "LessThan",
              "inputs": [
                { "market": "SMH", "transformer": "smh_rs_ma200" },
                { "ref": "threshold_sell" }
              ]
            },
            {
              "id": "rs_below_99_yesterday",
              "type": "Lag",
              "params": {
                "periods": 1,
                "fill_value": 0
              },
              "inputs": [
                { "ref": "rs_below_99" }
              ]
            },
            {
              "id": "rs_below_99_confirmed",
              "type": "And",
              "inputs": [
                { "ref": "rs_below_99" },
                { "ref": "rs_below_99_yesterday" }
              ]
            }
          ],
          "outputs": {
            "buy_signal": "rs_above_101",
            "sell_signal": "rs_below_99_confirmed",
            "indicators": [
              { "id": "rs_above_101", "output_name": "buy_cond" },
              { "id": "rs_below_99", "output_name": "sell_cond_raw" },
              { "id": "rs_below_99_yesterday", "output_name": "sell_cond_yesterday" },
              { "id": "rs_below_99_confirmed", "output_name": "sell_cond_confirmed" }
            ],
            "market_indicators": [
              { "market": "SMH", "transformer": "smh_close", "output_name": "smh" },
              { "market": "SMH", "transformer": "smh_ma200", "output_name": "smh_ma200" },
              { "market": "SMH", "transformer": "smh_rs_ma200", "output_name": "smh_rs" }
            ]
          }
        },
        "capital_strategy": {
          "name": "PercentCapitalStrategy",
          "params": {
            "initial_capital": 100000,
            "percents": 99
          }
        }
      },
      "symbols": [
        {"symbol": "SOXL", "name": "Semiconductor 3x Bull ETF"}
      ],
      "start_date": "2018-01-01",
      "currency": "USD",
      "market": "US",
      "commission": 0.0001,
      "update_time": "08:00"
    },
    {
      "name": "SOXL非对称混合策略 (The Hybrid V2)",
      "code": "soxl_hybrid",
      "description": "非对称入场出场(带缓冲带)：买入需RS_MA200>101且RS_MA20>100，卖出RS_MA20<99。减少whipsaw。",
      "strategy_definition": {
        "market_indicators": {
          "indicators": [
            { "code": "SMH" }
          ],
          "transformers": [
            {
              "name": "smh_close",
              "type": "IdentityTransformer",
              "params": {
                "indicator": "SMH",
                "field": "Close"
              }
            },
            {
              "name": "smh_ma20",
              "type": "MovingAverageTransformer",
              "params": {
                "indicator": "SMH",
                "window": 20,
                "method": "simple",
                "field": "Close"
              }
            },
            {
              "name": "smh_ma200",
              "type": "MovingAverageTransformer",
              "params": {
                "indicator": "SMH",
                "window": 200,
                "method": "simple",
                "field": "Close"
              }
            },
            {
              "name": "smh_rs_ma20",
              "type": "RelativeStrengthTransformer",
              "params": {
                "indicator": "SMH",
                "reference": "ma",
                "window": 20,
                "field": "Close"
              }
            },
            {
              "name": "smh_rs_ma200",
              "type": "RelativeStrengthTransformer",
              "params": {
                "indicator": "SMH",
                "reference": "ma",
                "window": 200,
                "field": "Close"
              }
            }
          ]
        },
        "trade_strategy": {
          "indicators": [
            {
              "id": "threshold_101",
              "type": "Constant",
              "params": { "value": 101 }
            },
            {
              "id": "threshold_100",
              "type": "Constant",
              "params": { "value": 100 }
            },
            {
              "id": "threshold_99",
              "type": "Constant",
              "params": { "value": 99 }
            }
          ],
          "signals": [
            {
              "id": "smh_effective_above_ma200",
              "type": "GreaterThan",
              "inputs": [
                { "market": "SMH", "transformer": "smh_rs_ma200" },
                { "ref": "threshold_101" }
              ]
            },
            {
              "id": "smh_above_ma20",
              "type": "GreaterThan",
              "inputs": [
                { "market": "SMH", "transformer": "smh_rs_ma20" },
                { "ref": "threshold_100" }
              ]
            },
            {
              "id": "smh_effective_below_ma20",
              "type": "LessThan",
              "inputs": [
                { "market": "SMH", "transformer": "smh_rs_ma20" },
                { "ref": "threshold_99" }
              ]
            },
            {
              "id": "buy_condition",
              "type": "And",
              "inputs": [
                { "ref": "smh_effective_above_ma200" },
                { "ref": "smh_above_ma20" }
              ]
            }
          ],
          "outputs": {
            "buy_signal": "buy_condition",
            "sell_signal": "smh_effective_below_ma20",
            "indicators": [
              { "id": "smh_effective_above_ma200", "output_name": "above_ma200" },
              { "id": "smh_above_ma20", "output_name": "above_ma20" },
              { "id": "smh_effective_below_ma20", "output_name": "below_ma20" },
              { "id": "buy_condition", "output_name": "buy_cond" }
            ],
            "market_indicators": [
              { "market": "SMH", "transformer": "smh_close", "output_name": "smh" },
              { "market": "SMH", "transformer": "smh_ma20", "output_name": "smh_ma20" },
              { "market": "SMH", "transformer": "smh_ma200", "output_name": "smh_ma200" },
              { "market": "SMH", "transformer": "smh_rs_ma20", "output_name": "rs_ma20" },
              { "market": "SMH", "transformer": "smh_rs_ma200", "output_name": "rs_ma200" }
            ]
          }
        },
        "capital_strategy": {
          "name": "PercentCapitalStrategy",
          "params": {
            "initial_capital": 100000,
            "percents": 99
          }
        }
      },
      "symbols": [
        {"symbol": "SOXL", "name": "Semiconductor 3x Bull ETF"}
      ],
      "start_date": "2018-01-01",
      "currency": "USD",
      "market": "US",
      "commission": 0.0001,
      "update_time": "08:00"
    },
    {
      "name": "SOXL动态仓位策略 (The Dynamic)",
      "code": "soxl_dynamic",
      "description": "在混合策略基础上增加动态仓位：趋势强(RS高)时满仓，趋势弱时减仓。RS_MA200从95到105线性映射到30%-100%仓位。",
      "strategy_definition": {
        "market_indicators": {
          "indicators": [
            { "code": "SMH" }
          ],
          "transformers": [
            {
              "name": "smh_close",
              "type": "IdentityTransformer",
              "params": {
                "indicator": "SMH",
                "field": "Close"
              }
            },
            {
              "name": "smh_ma20",
              "type": "MovingAverageTransformer",
              "params": {
                "indicator": "SMH",
                "window": 20,
                "method": "simple",
                "field": "Close"
              }
            },
            {
              "name": "smh_ma200",
              "type": "MovingAverageTransformer",
              "params": {
                "indicator": "SMH",
                "window": 200,
                "method": "simple",
                "field": "Close"
              }
            },
            {
              "name": "smh_rs_ma20",
              "type": "RelativeStrengthTransformer",
              "params": {
                "indicator": "SMH",
                "reference": "ma",
                "window": 20,
                "field": "Close"
              }
            },
            {
              "name": "smh_rs_ma200",
              "type": "RelativeStrengthTransformer",
              "params": {
                "indicator": "SMH",
                "reference": "ma",
                "window": 200,
                "field": "Close"
              }
            }
          ]
        },
        "trade_strategy": {
          "indicators": [
            {
              "id": "threshold_100",
              "type": "Constant",
              "params": { "value": 100 }
            }
          ],
          "signals": [
            {
              "id": "smh_above_ma200",
              "type": "GreaterThan",
              "inputs": [
                { "market": "SMH", "transformer": "smh_rs_ma200" },
                { "ref": "threshold_100" }
              ]
            },
            {
              "id": "smh_above_ma20",
              "type": "GreaterThan",
              "inputs": [
                { "market": "SMH", "transformer": "smh_rs_ma20" },
                { "ref": "threshold_100" }
              ]
            },
            {
              "id": "smh_below_ma20",
              "type": "LessThan",
              "inputs": [
                { "market": "SMH", "transformer": "smh_rs_ma20" },
                { "ref": "threshold_100" }
              ]
            },
            {
              "id": "buy_condition",
              "type": "And",
              "inputs": [
                { "ref": "smh_above_ma200" },
                { "ref": "smh_above_ma20" }
              ]
            },
            {
              "id": "dynamic_weight",
              "type": "LinearScaleWeight",
              "inputs": [
                { "market": "SMH", "transformer": "smh_rs_ma200" }
              ],
              "params": {
                "min_indicator": 95,
                "max_indicator": 110,
                "min_weight": 0.3,
                "max_weight": 1.0,
                "clip": true
              }
            }
          ],
          "outputs": {
            "buy_signal": "buy_condition",
            "sell_signal": "smh_below_ma20",
            "target_weight": "dynamic_weight",
            "indicators": [
              { "id": "smh_above_ma200", "output_name": "above_ma200" },
              { "id": "smh_above_ma20", "output_name": "above_ma20" },
              { "id": "smh_below_ma20", "output_name": "below_ma20" },
              { "id": "buy_condition", "output_name": "buy_cond" },
              { "id": "dynamic_weight", "output_name": "target_weight" }
            ],
            "market_indicators": [
              { "market": "SMH", "transformer": "smh_close", "output_name": "smh" },
              { "market": "SMH", "transformer": "smh_ma20", "output_name": "smh_ma20" },
              { "market": "SMH", "transformer": "smh_ma200", "output_name": "smh_ma200" },
              { "market": "SMH", "transformer": "smh_rs_ma20", "output_name": "rs_ma20" },
              { "market": "SMH", "transformer": "smh_rs_ma200", "output_name": "rs_ma200" }
            ]
          }
        },
        "capital_strategy": {
          "name": "RebalancingCapitalStrategy",
          "params": {
            "initial_capital": 100000
          }
        }
      },
      "symbols": [
        {"symbol": "SOXL", "name": "Semiconductor 3x Bull ETF"}
      ],
      "start_date": "2018-01-01",
      "currency": "USD",
      "market": "US",
      "commission": 0.0001,
      "update_time": "08:00"
    },
    {
      "name": "SOXL纯MA50策略 (Pure MA50)",
      "code": "soxl_ma50",
      "description": "经典中期趋势跟随。买入:SMH RS_MA50>101连续2天确认；卖出:RS_MA50<99。比MA20少磨损，比MA200更灵敏。",
      "strategy_definition": {
        "market_indicators": {
          "indicators": [
            { "code": "SMH" }
          ],
          "transformers": [
            {
              "name": "smh_close",
              "type": "IdentityTransformer",
              "params": {
                "indicator": "SMH",
                "field": "Close"
              }
            },
            {
              "name": "smh_ma50",
              "type": "MovingAverageTransformer",
              "params": {
                "indicator": "SMH",
                "window": 50,
                "method": "simple",
                "field": "Close"
              }
            },
            {
              "name": "smh_rs_ma50",
              "type": "RelativeStrengthTransformer",
              "params": {
                "indicator": "SMH",
                "reference": "ma",
                "window": 50,
                "field": "Close"
              }
            }
          ]
        },
        "trade_strategy": {
          "indicators": [
            {
              "id": "threshold_101",
              "type": "Constant",
              "params": { "value": 101 }
            },
            {
              "id": "threshold_99",
              "type": "Constant",
              "params": { "value": 99 }
            }
          ],
          "signals": [
            {
              "id": "rs_above_101",
              "type": "GreaterThan",
              "inputs": [
                { "market": "SMH", "transformer": "smh_rs_ma50" },
                { "ref": "threshold_101" }
              ]
            },
            {
              "id": "rs_above_101_yesterday",
              "type": "Lag",
              "params": { "periods": 1, "fill_value": 0 },
              "inputs": [
                { "ref": "rs_above_101" }
              ]
            },
            {
              "id": "buy_confirmed",
              "type": "And",
              "inputs": [
                { "ref": "rs_above_101" },
                { "ref": "rs_above_101_yesterday" }
              ]
            },
            {
              "id": "rs_below_99",
              "type": "LessThan",
              "inputs": [
                { "market": "SMH", "transformer": "smh_rs_ma50" },
                { "ref": "threshold_99" }
              ]
            }
          ],
          "outputs": {
            "buy_signal": "buy_confirmed",
            "sell_signal": "rs_below_99",
            "indicators": [
              { "id": "rs_above_101", "output_name": "above_ma50" },
              { "id": "buy_confirmed", "output_name": "buy_cond" },
              { "id": "rs_below_99", "output_name": "sell_cond" }
            ],
            "market_indicators": [
              { "market": "SMH", "transformer": "smh_close", "output_name": "smh" },
              { "market": "SMH", "transformer": "smh_ma50", "output_name": "smh_ma50" },
              { "market": "SMH", "transformer": "smh_rs_ma50", "output_name": "rs_ma50" }
            ]
          }
        },
        "capital_strategy": {
          "name": "PercentCapitalStrategy",
          "params": {
            "initial_capital": 100000,
            "percents": 99
          }
        }
      },
      "symbols": [
        {"symbol": "SOXL", "name": "Semiconductor 3x Bull ETF"}
      ],
      "start_date": "2018-01-01",
      "currency": "USD",
      "market": "US",
      "commission": 0.0001,
      "update_time": "08:00"
    },
    {
      "name": "SOXL宽进严出策略 (The Compromise)",
      "code": "soxl_compromise",
      "description": "MA200确认大牛市进场，MA50保护利润离场。买入:RS_MA200>101且RS_MA50>100；卖出:RS_MA50<99。为负成本持仓量身定做。",
      "strategy_definition": {
        "market_indicators": {
          "indicators": [
            { "code": "SMH" }
          ],
          "transformers": [
            {
              "name": "smh_close",
              "type": "IdentityTransformer",
              "params": {
                "indicator": "SMH",
                "field": "Close"
              }
            },
            {
              "name": "smh_ma50",
              "type": "MovingAverageTransformer",
              "params": {
                "indicator": "SMH",
                "window": 50,
                "method": "simple",
                "field": "Close"
              }
            },
            {
              "name": "smh_ma200",
              "type": "MovingAverageTransformer",
              "params": {
                "indicator": "SMH",
                "window": 200,
                "method": "simple",
                "field": "Close"
              }
            },
            {
              "name": "smh_rs_ma50",
              "type": "RelativeStrengthTransformer",
              "params": {
                "indicator": "SMH",
                "reference": "ma",
                "window": 50,
                "field": "Close"
              }
            },
            {
              "name": "smh_rs_ma200",
              "type": "RelativeStrengthTransformer",
              "params": {
                "indicator": "SMH",
                "reference": "ma",
                "window": 200,
                "field": "Close"
              }
            }
          ]
        },
        "trade_strategy": {
          "indicators": [
            {
              "id": "threshold_101",
              "type": "Constant",
              "params": { "value": 101 }
            },
            {
              "id": "threshold_100",
              "type": "Constant",
              "params": { "value": 100 }
            },
            {
              "id": "threshold_99",
              "type": "Constant",
              "params": { "value": 99 }
            }
          ],
          "signals": [
            {
              "id": "above_ma200",
              "type": "GreaterThan",
              "inputs": [
                { "market": "SMH", "transformer": "smh_rs_ma200" },
                { "ref": "threshold_101" }
              ]
            },
            {
              "id": "above_ma50",
              "type": "GreaterThan",
              "inputs": [
                { "market": "SMH", "transformer": "smh_rs_ma50" },
                { "ref": "threshold_100" }
              ]
            },
            {
              "id": "buy_condition",
              "type": "And",
              "inputs": [
                { "ref": "above_ma200" },
                { "ref": "above_ma50" }
              ]
            },
            {
              "id": "below_ma50",
              "type": "LessThan",
              "inputs": [
                { "market": "SMH", "transformer": "smh_rs_ma50" },
                { "ref": "threshold_99" }
              ]
            }
          ],
          "outputs": {
            "buy_signal": "buy_condition",
            "sell_signal": "below_ma50",
            "indicators": [
              { "id": "above_ma200", "output_name": "above_ma200" },
              { "id": "above_ma50", "output_name": "above_ma50" },
              { "id": "buy_condition", "output_name": "buy_cond" },
              { "id": "below_ma50", "output_name": "sell_cond" }
            ],
            "market_indicators": [
              { "market": "SMH", "transformer": "smh_close", "output_name": "smh" },
              { "market": "SMH", "transformer": "smh_ma50", "output_name": "smh_ma50" },
              { "market": "SMH", "transformer": "smh_ma200", "output_name": "smh_ma200" },
              { "market": "SMH", "transformer": "smh_rs_ma50", "output_name": "rs_ma50" },
              { "market": "SMH", "transformer": "smh_rs_ma200", "output_name": "rs_ma200" }
            ]
          }
        },
        "capital_strategy": {
          "name": "PercentCapitalStrategy",
          "params": {
            "initial_capital": 100000,
            "percents": 99
          }
        }
      },
      "symbols": [
        {"symbol": "SOXL", "name": "Semiconductor 3x Bull ETF"}
      ],
      "start_date": "2018-01-01",
      "currency": "USD",
      "market": "US",
      "commission": 0.0001,
      "update_time": "08:00"
    }
  ]
}
