54歳から始める株投機

億なんて目指していない、たった年120万円が欲しいだけ

EA やっぱり長期投資は強い

最初に、1回ポジションを株価870円の時に1148株で998760円分株を購入して
ずっと20年持ち続けた場合は、772145円利益が出た

こっちが、100万円の資金から始まって2%のリスクをとってトレードした結果
資金は、590456利益が出た

やっぱり、長期投資のほうが有利じゃないか!
という結果になっている。

たった一度、株を購入し忘れているだけで
それなりの利益が出ている
これに配当が付いていたはずなので、年4%で20年なら80万円があったとして
加算すると、160万円の利益がでたことになる

売買を繰り返した結果の60万円と100万円の差がでている

ここだけで比較すると長期投資はかなり強力な結果となる

これを今後覆せるのか?



さて、今後は、下のやりたいことを順番にやっていくつもりだ

  • ある程度利益が出たら、損切位置を1回だけ上げるブレイクイーブン機能を追加して
  • 利益が出るごとに、損切位置をずっと上げていくトレーリングストップ機能を追加して
  • ピラミッティング機能を入れて
  • 毎日、トレードしているロジックをランダムでトレードするようにして
  • それを、たくさん検証して
  • ほかの銘柄も試してみて

ここまでやって、めちゃくちゃなトレードをしたらどういう結果になるかがわかる

結果が楽しみだ
早く、そこまで行きたいが

単元未満株縛りで作っているので、逆指値指値がMT5の機能を使えないので作るのが難しいし

正月休みとはいえ、家族行事で時間がとれなんだよね







文字数稼ぎで、プログラムを載せます
drive.google.com


//+------------------------------------------------------------------+
//|                                                         test.mq5 |
//|                                  Copyright 2024, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2024, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"

// 注文関連
#include "OriginalTrade.mqh" // 注文関連機能を提供するファイルをインクルード
OriginalCTrade Trade; // 取引のための主要インスタンス
OriginalCPositions Positions; // ポジション管理のためのインスタンス

// 価格情報
#include "OriginalPrice.mqh" // 価格データ取得のためのファイルをインクルード
OriginalCBars Price; // 価格情報を管理するインスタンス

// タイマー
#include "OriginalTimer.mqh" // タイマー機能を提供するファイルをインクルード
OriginalCNewBar NewBar; // 新しいバーが生成されたかを検出するインスタンス


// インジケータ
#include "OriginalIndicators.mqh" // インジケータを扱うためのファイルをインクルード
CDerivediATR Atr;//ATRのインスタンス

//+------------------------------------------------------------------+
//| Input変数                                                         |
//+------------------------------------------------------------------+
input group "基本取引設定"  // 基本取引設定のグループ化
input ulong Slippage = 1;              // スリッページ設定
input ulong MagicNumber = 123;         // EA識別番号
input bool TradeOnNewBar = true;       // 新しいバーでの取引を行うかどうか

input group "ATRの設定"  // ATR設定のグループ化
input int ATRPeriod = 14;  // ATR平均線の期間

input group "資金管理"                  // 資金管理設定のグループ化
input bool UseMoneyManagement = true;  // マネーマネジメントを使用するかどうか
input double RiskPercent = 2;          // リスク許容度(%)
input double RiskMargin = 1000.0; //許容損失額を設定する

input double RiskToReward = 2.0; // リスクリワードの比率
//+------------------------------------------------------------------+
//| グローバル変数                                                       |
//+------------------------------------------------------------------+

ulong glBuyTicket;//ポジション番号を格納する変数
double gRiskMargin;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
   // フィルポリシーを取得する
   ENUM_ORDER_TYPE_FILLING filltype = FillPolicy();

   // EAのマジックナンバーを設定する
   Trade.SetMagicNumber(MagicNumber);
   Positions.SetMagicNumber(MagicNumber);

   // 注文実行時の許容スリッページを設定する
   Trade.SetDeviation(Slippage);

   // 取得したフィルポリシーを設定する
   Trade.SetFillType(filltype);
   
   // 価格情報の初期化
   Price.Init(_Symbol, _Period);
   
   // 短期移動平均線の初期化
   Atr.Init(_Symbol, _Period, ATRPeriod);
   
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
   // 新しいバーがあるかどうかの初期状態をtrueと仮定し、バーシフトを0に設定
   bool newBar = true;
   int barShift = 0;

   // 新しいバーでの取引を行う場合の処理
   if(TradeOnNewBar == true)
   {
      // 現在のシンボルと期間で新しいバーが始まったかどうかをチェック
      newBar = NewBar.CheckNewBar(_Symbol,_Period);
      
      // 新しいバーが確認された場合、バーシフトを1に設定
      barShift = 1;
   }
     
   // 新しいバーの確認
   if(!newBar)      return;
   
   // 計算結果を取得できるようにする
   Price.Update();
   
   // ロット調整
   double tradeSize;
   //資金管理モードONなら設定したリスクに応じたロットを算出
   if(UseMoneyManagement == true)
   {
      //許容損失額を設定する
		gRiskMargin = AccountInfoDouble(ACCOUNT_BALANCE) * (RiskPercent / 100);
   }
   else
   {
      //固定損切幅を指定
      gRiskMargin = RiskMargin;
   }

   // Positions.GetPosInfo();
   // Positions.GetBuyPosCount()
   // ポジションの確認
   if(glBuyTicket == 0)
   {
      // ポジションを持っていない

      // 計算結果を取得できるようにする
      Atr.Update();
      double atr = Atr.Main(barShift);
      tradeSize = MathFloor(gRiskMargin / (atr * 2.0));
      if(tradeSize<=0.0)   tradeSize = 1.0;

      glBuyTicket = Trade.Buy(_Symbol, tradeSize);
     
   } else {
      // ポジションを持っている
      
      double buyPrice = PositionOpenPrice(glBuyTicket);
      double buyVolume = PositionVolume(glBuyTicket);
      double buyClose = Price.Close(barShift);
      double buyProfit = (buyClose -  buyPrice) * buyVolume;
      double buyReward = gRiskMargin * RiskToReward;

      if(buyProfit > buyReward || buyProfit <= -gRiskMargin)
      {
         Trade.ClosePosition(glBuyTicket);
         glBuyTicket = 0;
      }
   }
  }