前提・実現したいこと
ここに質問の内容を詳しく書いてください。
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ここにより詳細な情報を記載してください。
あなたの回答
tips
プレビュー