全自動売買戦略:移動平均クロス戦略版を応用して、1か月3万円スイング投資法を実装してみた。

【40代50代】初心者でも稼げる!月3万円の利益!スイングトレード最強テクニックを公開

 という、YouTubeを見た。

内容要約




VBAでの実装

1. 楽天証券のスーパースクリーナーで時価総額、5000億以上をスクリーニング

CSVで掃き出し、Excelに貼り付け

2. 中期線(25MA)に対して、陰線で割って、翌日、陽線で返している。
Ø  過去30日分の「高値・安値・終値」株価データ取得

  こちらはすでにATR戦略で取得しているのでこのデータをそのまま使用。

全自動売買戦略:ATRトレール版をChatGPTくんと相談しながら、Excel VBA で処理作成

ATRトレールとは? ATRトレール(Average True Range Trail) 損失を最小限にしつつ利益を最大化する仕組み。 ATR(平均的な価格変動幅) を基にトレール型のストップ(…

①  前日、25MAを陰線下抜けている銘柄を探す。

 当日、前日、前々日の25MAを計算する。
 前日の終値 < 前日25MA かつ 前日終値 - 前日始値 < 0

② 前々日の終値が25MAの上にいること

前々日の終値 > 25MA

3. 前日の陰線の終値に対して、陽線の始値が上にある(25MAの上にある必要はない)

前日の終値 > 当日の始値 

4. かつ、陽線で終了(15:00の時点で判断) ➡ エントリ条件達成

 当日の終値 - 当日の始値 > 0

上記条件が成立したらエントリ条件達成

5. エントリ条件達成日、15:00 – 15:30 に、成買いの注文を入れておく 

 15時以降に当日が陽線に成ったらエントリ

この記事が参考になった!と思ったら、下のバナーをクリックして応援お願いします😊


Osya's Blog - にほんブログ村

VBAでコード化


Sub エントリ判定()
    Dim lastRow As Long, i As Long
    Dim currentPrice As Double, lowPrice As Double, trailLine As Double
    
    Dim thisWs As Worksheet
    Dim ws14 As Worksheet
    Set thisWs = ThisWorkbook.Sheets("メイン")
    Set ws14 = ThisWorkbook.Sheets("14日間データ")
    
    lastRow = thisWs.Cells(Rows.Count, "A").End(xlUp).Row
    elapsedTime = 0
    For i = 3 To lastRow
        thisWs.Range("H" & i).Value = 0
        thisWs.Range("I" & i).Value = 0
        thisWs.Range("J" & i).Value = 0
        thisWs.Range("p" & i).Value = 0
        
        If Int(thisWs.Range("Q" & i).Value) = Int(Now()) Then
            GoTo Continue
        End If
        ws14.Range("B2").Value = thisWs.Range("A" & i).Value
        
        ImportCSVToCurrentSheet
        Get25MA
        thisWs.Range("H" & i).Value = ws14.Range("B7").Value
        thisWs.Range("I" & i).Value = ws14.Range("B8").Value
        
        thisWs.Range("J" & i).Value = ws14.Range("H9").Value
        thisWs.Range("K" & i).Value = ws14.Range("I9").Value
        thisWs.Range("L" & i).Value = ws14.Range("J9").Value
        thisWs.Range("M" & i).Value = "=IF(P" & i & "<G" & i & ",1,0)"
        thisWs.Range("N" & i).Value = "=IF(D" & i & "-G" & i & ">0,1,0)" ' 当日陽線
        
        thisWs.Range("P" & i).Value = ws14.Range("D3").Value   ' 前日終値
        
        
'        If ws14.Range("G9").Value = 5 Then
'            thisWs.Range("O" & i).Value = "OK"
'        Else
'            thisWs.Range("O" & i).Value = "NG"
'        End If
        thisWs.Range("O" & i).Value = "=IF(SUM(J" & i & ":L" & i & ")=3,""リーチ"",IF(SUM(J" & i & ":N" & i & ")=5,""OK"",""""))"
        thisWs.Range("Q" & i).Value = Now()
Continue:

    Next i
    MsgBox "月3万円スイング終わりです。"
End Sub
'************************************************************************************************************
'      Get25MA : 前日、前々日の25MAを計算
'************************************************************************************************************
Sub Get25MA()
    Dim thisWs As Worksheet
    Dim ws14 As Worksheet
    Set thisWs = ThisWorkbook.Sheets("メイン")
    Set ws14 = ThisWorkbook.Sheets("14日間データ")
    
    ws14.Range("B7").Value = 0
    ws14.Range("B8").Value = 0
  ' 当日の値が返ってきた場合は、その前の行を前日値とする。
    If CDate(ws14.Range("A43").Value) < Date Then
        ' Culiculate Yesterday's 25MA
        Set priceRange = ws14.Range("B19:B43")
        ws14.Range("B7").Value = Application.WorksheetFunction.Average(priceRange)      ' 25MA(前日)
        Set priceRange = ws14.Range("B18:B42")
        ws14.Range("B8").Value = Application.WorksheetFunction.Average(priceRange)     ' 25MA(前々日)
        前日終値 = ws14.Range("B42").Value
        前日始値 = ws14.Range("E42").Value
        前前日終値 = ws14.Range("B41").Value
        前前日始値 = ws14.Range("E41").Value
    Else    ' 今日のデータが43行目
        ' Caliculate Yesterday's 25MA
        Set priceRange = ws14.Range("B18:B42")
        ws14.Range("B7").Value = Application.WorksheetFunction.Average(priceRange)      ' 25MA(前日)
        Set priceRange = ws14.Range("B17:B41")
        ws14.Range("B8").Value = Application.WorksheetFunction.Average(priceRange)     ' 25MA(前々日)
        前日終値 = ws14.Range("B43").Value
        前日始値 = ws14.Range("E43").Value
        前前日終値 = ws14.Range("B42").Value
        前前日始値 = ws14.Range("E42").Value
    End If
    前日25MA = ws14.Range("B7").Value
    前前日25MA = ws14.Range("B8").Value

'    ws14.Range("B9").Value = 0
    
    'O 前日、25MAを陰線下抜けている銘柄を探す。
    '
    '  当日、前日、前々日の25MAを計算する。
    ' 前日の終値 < 前日25MA かつ 前日終値 - 前日始値 < 0
    If 前日終値 < 前日25MA And (前日終値 - 前日始値) < 0 Then
        '
        '   O 前々日の終値が25MAの上にいること
        '        前々日の終値 > 前々日の25MA
        If 前前日終値 > 前前日25MA Then
            '
            '3. 前日の終値に対して、当日の始値が上にある(25MAの上にある必要はない)
            '     前日の終値 < 当日の始値 かつ 当日の終値 - 当日の始値 > 0
            If 前日終値 < ws14.Range("B6").Value And (ws14.Range("B3").Value - ws14.Range("B6").Value) > 0 Then
                '
                '4. かつ、陽線で終了(15:00の時点で判断) ? エントリ条件達成
                '  上記条件が成立したらエントリ条件達成
                ws14.Range("C9").Value = Now
                '
                '5. エントリ条件達成日、15:00 ? 15:30 に、成買いの注文を入れておく
                '15  時以降に当日が陽線に成ったらエントリ
            Else
                ws14.Range("C9").Value = Now
            End If
        Else
            ws14.Range("C9").Value = Now
        End If
    Else
        ws14.Range("C9").Value = Now
    End If
End Sub


 ソースを読んでみると、ちょっと譜に落ちない部分が出てきた。
  prevClose = Sheet1.Cells(i + 1, 4).Value
 prevClose ? 前日の終値? なんで次の行を見ているのだろう?
 ChatGPTに聞いてみる。
 なるほど。間違いというか、このサンプルソースは、14日データを取得後、日にち逆順に並び変えてからの処理のようだ。
 ソースに疑問点があったら、聞いた方がよい。
 古い情報で作っていて、動かない場合とかも結構ある。

この記事が参考になった!と思ったら、下のバナーをクリックして応援お願いします😊


Osya's Blog - にほんブログ村

落とし穴あり

 検証をしていると、期待通りの場合とそうでない場合がある。
 見直してみると、30日分のデータ取得で、当日分を含む場合と含まない場合があることが分かった。
 場が始まる前は当然、当日分は取得されない。しかし、当日分を含むタイミングがわからない。
 場が始まって値が付いた時かと思いきや、そうでもない。
 ので、最後の行に、当日分のデータがあるかないかを判定して処理を分けるようにした。


最後に

 昨日、検証してみた結果、対象銘柄は、316銘柄 、そのうち15時時点でリーチがかかったのは、6銘柄、エントリ条件が揃ったのが2銘柄。
 面白かったのが、決算の結果が悪く暴落した銘柄がヒットした。
 底を確認する手段になるかもしれない。
 とりあえず、買ってみた。
 いつも通り、2%下に損切値を設定し、アルゴで高値から2%下がったら利確。
 さてどうなることやら。

この記事が参考になった!と思ったら、下のバナーをクリックして応援お願いします😊


Osya's Blog - にほんブログ村

🎯仕事に疲れたときは

 私はこれです。仕事終わりや、チョっとつかれたときに、ミックスナッツとウイスキーまたは赤ワイン。
 コード譜書くのって結構つかれるのです。
 トリフ塩があれば最高です。軽く燻製してもグッド

Follow me!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です