質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MQL4

MQL4とは、MT4(MetaTrader4)で用いられるプログラム言語です。MT4は無料で使えるチャートソフトあり、MQL4を使うことで分析ツールのオリジナルスクリプトの作成ができます。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

0回答

3088閲覧

MQL4 勝率表示ができない

yuukan

総合スコア4

MQL4

MQL4とは、MT4(MetaTrader4)で用いられるプログラム言語です。MT4は無料で使えるチャートソフトあり、MQL4を使うことで分析ツールのオリジナルスクリプトの作成ができます。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2020/03/15 07:42

編集2020/03/17 09:49

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
MQL4で勝率表示のプログラミングを作っています。
勝率は表示されているのですがロウソクが出るたび
カウントしています。

発生している問題・エラーメッセージ

エラーメッセージはありません。

該当のソースコード

MQL4

1#property indicator_chart_window 2#property indicator_buffers 4 3 4#property indicator_color1 Pink 5#property indicator_color2 Blue 6#property indicator_color3 Orange 7#property indicator_color4 Red 8#property indicator_width1 2 9#property indicator_width2 2 10#property indicator_width3 10 11#property indicator_width4 10 12 13 extern string expire = "2021.12.20"; 14 extern int TextSize=44; 15 extern color TextColor1=Red; 16 extern color TextColor2=Blue; 17 18enum select1{ 19 20 popup = 1, //ポップアップ 21 mail = 2, //メール 22 pushAlert = 3 //プッシュ通知 23 24}; 25 26input bool labelOn = true; 27input int maxlimit = 300; 28input bool alert = true; 29input bool tutumiAlert = true; 30input select1 alertSelect = 1; 31bool authenticated = true; 32double goldUp[], deadDown[],maru[],batu[]; 33double FastMAnow, SlowMAnow, FastMAprevious, SlowMAprevious, FastMAafter, SlowMAafter; 34double Sum=0; 35double win=0; 36double lose=0; 37string sName = "SG"; 38string Name="wajdyss Account Information Indicator"; 39int super = 0; 40double atr = 0.0; 41int tutumiAlertCounts = 0; 42 43int init() 44{ 45 46if( authenticated && TimeCurrent() >= expire) 47{ 48authenticated = false; 49Alert("expire"); 50return (INIT_FAILED); 51} 52 53 54 55 56IndicatorBuffers(4); 57 SetIndexBuffer(0, goldUp); 58 SetIndexBuffer(1, deadDown); 59 SetIndexBuffer(2, maru); 60 SetIndexBuffer(3, batu); 61 SetIndexStyle(0, DRAW_ARROW, STYLE_SOLID); 62 SetIndexStyle(1, DRAW_ARROW, STYLE_SOLID); 63 SetIndexStyle(2,DRAW_ARROW,0,2); 64 SetIndexStyle(3,DRAW_ARROW,0,2); 65 SetIndexArrow(0, SYMBOL_ARROWUP); 66 SetIndexArrow(1,SYMBOL_ARROWDOWN); 67 SetIndexArrow(2,161); 68 SetIndexArrow(3,251); 69 ObjectDelete("v label"); 70 ObjectDelete("q label"); 71 72 if(tutumiAlert) EventSetTimer(1); 73 74 return(0); 75 76} 77 78//\\\\\\\\\\\\\\\\\\\\\\\\\\ 79 80void OnDeinit(const int reason) 81 82 83{ 84 85 86 ObjectDelete("v label"); 87 ObjectDelete("q label"); 88 89 if(tutumiAlert) EventKillTimer(); 90 } 91 92int OnCalculate(const int rates_total, 93 const int prev_calculated, 94 const datetime &time[], 95 const double &open[], 96 const double &high[], 97 const double &low[], 98 const double &close[], 99 const long &tick_volume[], 100 const long &volume[], 101 const int &spread[]){ 102 103 int limit = rates_total - prev_calculated; 104 105 if(limit != 0){ 106 limit = MathMin(maxlimit, rates_total-5); 107 objDelete(sName); 108 tutumiAlertCounts = 0; 109 } 110 111 for(int i=limit; i>=1; i --){ 112 113 FastMAnow =iMA(NULL, 0, 25, 0, MODE_SMA, PRICE_CLOSE, i+1); 114 FastMAafter = iMA(NULL, 0, 25, 0, MODE_SMA, PRICE_CLOSE, i); 115 SlowMAnow = iMA(NULL, 0, 75, 0, MODE_SMA, PRICE_CLOSE, i+1); 116 SlowMAafter = iMA(NULL, 0, 75, 0, MODE_SMA, PRICE_CLOSE, i); 117 118 119 goldUp[i] = EMPTY_VALUE; 120 deadDown[i] = EMPTY_VALUE; 121 maru[i]=EMPTY_VALUE; 122 if(SlowMAnow<=FastMAnow && SlowMAafter > FastMAafter) { 123 124 goldUp[i] = low[i]-atr; 125 if(goldUp[i]!=0) 126 { 127 Sum++; 128 if(Close[i-1]>Open[i-1]) 129 {win++; 130 maru[i] = high[i]+atr; 131} 132 else if(Close[i-1]<=Open[i-1]) 133 {lose++; 134 batu[i]=high[i]+atr;} 135 } 136 137 138 139 140 if(alert && i == 0){ 141 if(alertSelect == 1) Alert(_Symbol + "[High]"); 142 else if(alertSelect == 2) SendMail(_Symbol + "[High]", ""); 143 else SendNotification(_Symbol + "[High]"); 144 145 return(0); 146 } 147 } 148 149 if(SlowMAnow>= FastMAnow && SlowMAafter < FastMAafter ) { 150 151 deadDown[i]=high[i] + atr; 152 if(deadDown[i]!=1) 153 { 154 Sum++; 155 if(Close[i-1]<Open[i-1]) 156 {win++; 157 maru[i] = low[i]-atr; 158 } 159else if(Close[i-1]>=Open[i-1]) 160 161 {lose++; 162 batu[i]=low[i]+atr;} 163 } 164 165 166 if(alert && i == 0){ 167 if(alertSelect == 1) Alert(_Symbol + "[Low] "); 168 else if(alertSelect == 2) SendMail(_Symbol + "[Low]", ""); 169 else SendNotification(_Symbol + "[Low] "); 170 171 return(0); 172 } 173 } 174 175 176 177 } 178 179 180 181 182 183//以下の文が問題と考えております 184 if(Sum!=0) { 185 ObjectDelete("d label"); 186 ObjectDelete("e label"); 187 { 188 ObjectCreate("v label", OBJ_LABEL, 0,0,0); 189 ObjectSetText("v label","勝ち" +win+" 負け"+ lose , 25, "MS 明朝", TextColor2); 190 ObjectSet("v label", OBJPROP_XDISTANCE,40); 191 ObjectSet("v label", OBJPROP_YDISTANCE,140); 192 } 193 194 // e 195 196 { 197 ObjectCreate("q label", OBJ_LABEL, 0,0,0); 198 ObjectSetText("q label", "勝率 ;" +win/Sum*100 +"%" , 25, "MS 明朝", TextColor1); 199 ObjectSet("q label", OBJPROP_XDISTANCE,500); 200 ObjectSet("q label", OBJPROP_YDISTANCE,140); 201 } 202 203 204 205} 206 207 208 209 return( rates_total); 210 } 211 212 213 214 215 216 217 218void objDelete(string basicName){ 219 220 for(int i=ObjectsTotal();i>=0;i--){ 221 string ObjName = ObjectName(i); 222 if(StringFind(ObjName, basicName) >=0) ObjectDelete(ObjName); 223 } 224 225} 226 227### 試したこと 228 229 230戻り値の変更等は行いました。 231 232### 補足情報(FW/ツールのバージョンなど) 233 234ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問