[[20190311215949]] 『初心者です。エラー』(あいり) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『初心者です。エラー』(あいり)

どうもはじめまして。
マクロ全くの初心者なのですが下記ネットのコピペなのですが
完全コピペですらエラーになってしまいます。
どなたか心優しい方原因を教えていただけないでしょうか。
昨日3時間ほどずっと一人で調べて頑張って、Windows10なら
JAVAが8じゃないといけないということ調べたら8になってました。
Windows64bitにしました。
libreoffice 6.2じゃマクロはできないのでしょうか。

引数は省略できませんというエラーになります。
昨日も今日もずっとそのほかも色々なエラーになります。

'Copyright 2015, Life with FX
'Link - http://lifewithfx.jp

Sub CalcOptimalF()

    Dim FVal As Double
    Dim FStepVal As Double
    Dim FLastVal As Double

    Dim HPRVal As Double
    Dim TWRVal As Double
    Dim MinPips As Double
    Dim OptimalF As Double
    Dim MaxTWR As Double
    Dim GeoMeaVal As Double

    Dim LineIndicator As Long
    Dim LastLineNumber As Long

    Dim EARangeStarts As Long
    Dim EARangeEnds As Long
    Dim IndiRangeProcess As Long
    Dim NumOfTrades As Long

    Dim RecsSheetName As String
    Dim TwrSheetName  As String
    Dim OptimalFSheetName As String

    Dim RecPipsColInd As Integer
    Dim TwrSheetRowInd As Integer
    Dim TwrSheetColInd As Integer

    Dim WinTradeCnt As Long
    Dim LossTradeCnt As Long
    Dim WinRate As Double
    Dim AvgWinInPips As Double
    Dim AvgLossInPips As Double
    Dim TotalWinInPips As Double
    Dim TotalLossInPips As Double
    Dim PayoffRatio As Double
    Dim WinTradeThresholdInPips As Double

    '初期設定
    RecsSheetName = Worksheets(1).Name

    If Worksheets.Count < 3 Then
        Worksheets.Add After:=Worksheets(RecsSheetName), Count:=(3 - Worksheets.Count)
    End If

    TwrSheetName = Worksheets(2).Name
    OptimalFSheetName = Worksheets(3).Name
    RecPipsColInd = 2

    '結果の格納シートの初期化
    Worksheets(TwrSheetName).Cells.Clear
    Worksheets(TwrSheetName).Cells(1, 1) = "f"
    Worksheets(OptimalFSheetName).Cells.Clear
    Worksheets(OptimalFSheetName).Cells(1, 1) = "トレード数"
    Worksheets(OptimalFSheetName).Cells(1, 2) = "想定最大損失(pips)"
    Worksheets(OptimalFSheetName).Cells(1, 3) = "最大最終資産倍率(倍)"
    Worksheets(OptimalFSheetName).Cells(1, 4) = "オプティマルf"
    Worksheets(OptimalFSheetName).Cells(1, 5) = "幾何平均"
    Worksheets(OptimalFSheetName).Cells(1, 6) = "勝ちトレード数"
    Worksheets(OptimalFSheetName).Cells(1, 7) = "負けトレード数"
    Worksheets(OptimalFSheetName).Cells(1, 8) = "勝率(%)"
    Worksheets(OptimalFSheetName).Cells(1, 9) = "平均勝ちトレード(pips)"
    Worksheets(OptimalFSheetName).Cells(1, 10) = "平均負けトレード(pips)"
    Worksheets(OptimalFSheetName).Cells(1, 11) = "ペイオフレシオ"

    '初期状態の準備
    TwrSheetColInd = 1
    LineIndicator = 2
    EARangeStarts = 2
    LastLineNumber = Worksheets(RecsSheetName).Range("B1").End(xlDown).Row

    MaxTWR = -1
    OptimalF = 0
    MinPips = 100000
    FVal = 0.001
    FStepVal = 0.001
    FLastVal = 0.999

    WinTradeThresholdInPips = 0.001
    WinTradeCnt = 0
    LossTradeCnt = 0
    WinRate = 0
    AvgWinInPips = 0
    AvgLossInPips = 0
    TotalWinInPips = 0
    TotalLossInPips = 0
    PayoffRatio = 0

    MsgBox "fの初期値::" & FVal & "    fの変化値::" & FStepVal & "    fの最大値::" & FLastVal & "  にて計算処理を開始"

    '処理本体
    For LineIndicator = 2 To LastLineNumber Step 1

        '最大損失を押さえる
        If (MinPips > Worksheets(RecsSheetName).Cells(LineIndicator, RecPipsColInd)) Then
            MinPips = Worksheets(RecsSheetName).Cells(LineIndicator, RecPipsColInd)
        End If

        '統計情報
        If Worksheets(RecsSheetName).Cells(LineIndicator, RecPipsColInd) > WinTradeThresholdInPips Then
            WinTradeCnt = WinTradeCnt + 1
            TotalWinInPips = TotalWinInPips + Worksheets(RecsSheetName).Cells(LineIndicator, RecPipsColInd)
        Else
            LossTradeCnt = LossTradeCnt + 1
            TotalLossInPips = TotalLossInPips + Worksheets(RecsSheetName).Cells(LineIndicator, RecPipsColInd)
        End If

    Next LineIndicator

    'Max TWRを総当たりで計算し、OptimalFを導出する
    EARangeEnds = LastLineNumber
    NumOfTrades = LastLineNumber - 1
    TwrSheetColInd = TwrSheetColInd + 1
    TwrSheetRowInd = 1

    'シートの見出しを設定する
    Worksheets(TwrSheetName).Cells(TwrSheetRowInd, TwrSheetColInd) = "TWRs"
    TwrSheetRowInd = TwrSheetRowInd + 1

    '掛け率を変化させTWRの算出を行う
    For FVal = 0.001 To FLastVal Step FStepVal

        TWRVal = 1

        For IndiRangeProcess = EARangeStarts To EARangeEnds Step 1
            HPRVal = CalcHPR(Worksheets(RecsSheetName).Cells(IndiRangeProcess, RecPipsColInd), MinPips, FVal)
            TWRVal = TWRVal * HPRVal
        Next IndiRangeProcess

        '1つのf値について、TWRの算出が完了した (データの記録とオプティマルfを保存する)
        Worksheets(TwrSheetName).Cells(TwrSheetRowInd, 1) = FVal
        Worksheets(TwrSheetName).Cells(TwrSheetRowInd, TwrSheetColInd) = TWRVal
        TwrSheetRowInd = TwrSheetRowInd + 1

        If MaxTWR < TWRVal Then
            MaxTWR = TWRVal
            OptimalF = FVal
        End If

    Next FVal

    '統計情報の整備
    If WinTradeCnt <> 0 Then
        AvgWinInPips = TotalWinInPips / WinTradeCnt
    Else
        AvgWinInPips = 0
    End If

    If LossTradeCnt <> 0 Then
        AvgLossInPips = TotalLossInPips / LossTradeCnt
        ProfitFactor = TotalWinInPips / TotalLossInPips * -1
    Else
        AvgLossInPips = 0
        ProfitFactor = 999
    End If

    WinRate = WinTradeCnt / (WinTradeCnt + LossTradeCnt) * 100

    If AvgLossInPips <> 0 Then
        PayoffRatio = AvgWinInPips / AvgLossInPips
    Else
        PayoffRatio = 999
    End If

    '0除算対策
    If OptimalF < 0.01 Then
        OptimalF = 0.001
    End If

    '幾何平均等の計算
    GeoMeaVal = Exp((1 / NumOfTrades) * Log(MaxTWR))

    '算出済みのオプティマルfを記録する
    Worksheets(TwrSheetName).Cells(TwrSheetRowInd, 1) = "MaxTWR"
    Worksheets(TwrSheetName).Cells(TwrSheetRowInd, TwrSheetColInd) = MaxTWR
    Worksheets(TwrSheetName).Cells(TwrSheetRowInd + 1, 1) = "オプティマルf"
    Worksheets(TwrSheetName).Cells(TwrSheetRowInd + 1, TwrSheetColInd) = OptimalF
    Worksheets(OptimalFSheetName).Cells(TwrSheetColInd, 1) = NumOfTrades
    Worksheets(OptimalFSheetName).Cells(TwrSheetColInd, 2) = Round(MinPips, 1)
    Worksheets(OptimalFSheetName).Cells(TwrSheetColInd, 3) = Round(MaxTWR, 3)
    Worksheets(OptimalFSheetName).Cells(TwrSheetColInd, 4) = Round(OptimalF, 5)
    Worksheets(OptimalFSheetName).Cells(TwrSheetColInd, 5) = Round(GeoMeaVal, 4)
    Worksheets(OptimalFSheetName).Cells(TwrSheetColInd, 6) = WinTradeCnt
    Worksheets(OptimalFSheetName).Cells(TwrSheetColInd, 7) = LossTradeCnt
    Worksheets(OptimalFSheetName).Cells(TwrSheetColInd, 8) = Round(WinRate, 2)
    Worksheets(OptimalFSheetName).Cells(TwrSheetColInd, 9) = Round(AvgWinInPips, 1)
    Worksheets(OptimalFSheetName).Cells(TwrSheetColInd, 10) = Round(AvgLossInPips, 1)
    Worksheets(OptimalFSheetName).Cells(TwrSheetColInd, 11) = Abs(Round(PayoffRatio, 3))

    MsgBox "Task Completed!!"
    Worksheets(OptimalFSheetName).Activate

End Sub

Function CalcHPR(ByVal pips As Double, ByVal MinPips As Double, ByVal f As Double) As Double

    CalcHPR = 1 + (f * (-1 * pips / MinPips))
End Function

< 使用 アプリ:libreoffice 6.2、使用 OS:Windows10 >


 よく読んでください。
 フルコンパチブルではなさそうです。
http://pineplanter.moo.jp/non-it-salaryman/2017/03/02/vba-on-libreoffice/
https://ts0818.hatenablog.com/entry/2017/12/24/225311
(seiya) 2019/03/11(月) 22:24

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.