ソースを参照

ticket # 1483

AhtashamShahzad3 2 年 前
コミット
d102f9cd4b
共有2 個のファイルを変更した150 個の追加40 個の削除を含む
  1. BIN
      BOS_CHOCH.ex5
  2. 150 40
      BOS_CHOCH.mq5

BIN
BOS_CHOCH.ex5


+ 150 - 40
BOS_CHOCH.mq5

@@ -13,6 +13,7 @@ input string object_name = "line";
13 13
 
14 14
 int ind = 0;
15 15
 string trend;
16
+
16 17
 bool bearish_found = false;
17 18
 bool bullish_found = false;
18 19
 
@@ -27,6 +28,7 @@ int index_of_high = 0;
27 28
 
28 29
 int high_index=0;
29 30
 int low_index =0;
31
+
30 32
 double high,low,low1,high1,low2,high2;
31 33
 
32 34
 int Store_bos_last_index = 0;
@@ -34,9 +36,6 @@ int Store_bos_last_index = 0;
34 36
 
35 37
 bool choch = false;
36 38
 int index = 0;
37
-
38
-int arrow_code_high = 108;
39
-int arrow_code_low  = 108;
40 39
 //+------------------------------------------------------------------+
41 40
 //| Expert initialization function                                   |
42 41
 //+------------------------------------------------------------------+
@@ -222,20 +221,102 @@ void Bos(int i)
222 221
   }
223 222
 
224 223
 
224
+
225 225
 //+------------------------------------------------------------------+
226 226
 //|                                                                  |
227 227
 //+------------------------------------------------------------------+
228
-void Entry_Action_1_up(int Store_bos_last_index, int i)
228
+void Entry_Action_1_down(int Store_bos_last_index, int i,int diff)
229 229
   {
230
+
231
+// i is the index of the choch
232
+
233
+
230 234
    for(int j=Store_bos_last_index+1; j < iBars(Symbol(),PERIOD_CURRENT); j++)
231 235
      {
236
+      diff++;
237
+      if(checkCandle(j) == "Bullish")
238
+        {
239
+
240
+         //Print("bullish found at index ",j);
241
+
242
+         ind = j;     // reversal candle index
243
+         bullish_found = true;
244
+
245
+         break;
246
+        }
247
+
248
+     }
249
+
250
+   Print("condition satisfied :  ",check_values_less_than_choch_high(diff,i));
251
+
252
+   Print("choch candle  open is ",iOpen(Symbol(),PERIOD_CURRENT,i));
253
+   Print("reversal candle  open is ",iOpen(Symbol(),PERIOD_CURRENT,ind));
254
+
255
+   if(check_values_less_than_choch_high(diff,i) == true)
256
+     {
257
+      if(iOpen(Symbol(),PERIOD_CURRENT,ind) > iOpen(Symbol(),PERIOD_CURRENT,i) && iClose(Symbol(),PERIOD_CURRENT,ind) < iClose(Symbol(),PERIOD_CURRENT,i))
258
+        {
259
+         Print("Place buy order -----------------------------------------------------------------------: ");
260
+        }
261
+
262
+
263
+     }
264
+
265
+//Print(diff);
266
+   if(bullish_found == true)
267
+     {
268
+
269
+      ObjectCreate(0,"line14"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,ind),iHigh(Symbol(),PERIOD_CURRENT,ind),iTime(Symbol(),PERIOD_CURRENT,i),iHigh(Symbol(),PERIOD_CURRENT,ind));
270
+      ObjectCreate(0,"line15"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,ind),iLow(Symbol(),PERIOD_CURRENT,ind),iTime(Symbol(),PERIOD_CURRENT,i),iLow(Symbol(),PERIOD_CURRENT,ind));
271
+
272
+      ObjectSetInteger(0,"line14"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_COLOR,clrBlue);
273
+      ObjectSetInteger(0,"line15"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_COLOR,clrBlue);
274
+
275
+      ObjectCreate(0,"line16"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,ind),iClose(Symbol(),PERIOD_CURRENT,ind),iTime(Symbol(),PERIOD_CURRENT,i),iClose(Symbol(),PERIOD_CURRENT,ind));
276
+      ObjectCreate(0,"line17"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,ind),iOpen(Symbol(),PERIOD_CURRENT,ind),iTime(Symbol(),PERIOD_CURRENT,i),iOpen(Symbol(),PERIOD_CURRENT,ind));
277
+
278
+      ObjectSetInteger(0,"line16"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_STYLE,STYLE_DOT);
279
+      ObjectSetInteger(0,"line17"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_STYLE,STYLE_DOT);
280
+
281
+      diff = 0;
282
+
283
+
284
+
285
+      bullish_found = false;
286
+
287
+     }
288
+  }
289
+//+------------------------------------------------------------------+
290
+//|                                                                  |
291
+//+------------------------------------------------------------------+
292
+void Entry_Action_1_up(int Store_bos_last_index, int i,int diff)
293
+  {
294
+   for(int j=Store_bos_last_index+1; j < iBars(Symbol(),PERIOD_CURRENT); j++)
295
+     {
296
+      diff++;
232 297
       if(checkCandle(j) == "Bearish")
233 298
         {
234
-         ind = j;
299
+         ind = j;    // reversal candle index
235 300
          bearish_found = true;
236 301
          break;
237 302
         }
238 303
 
304
+     }
305
+   Print("diff is ", diff);
306
+
307
+   Print("condition satisfied :  ",check_values_less_than_choch_low(diff,i));
308
+
309
+   Print("choch candle  open is ",iOpen(Symbol(),PERIOD_CURRENT,i));
310
+   Print("reversal candle  open is ",iOpen(Symbol(),PERIOD_CURRENT,ind));
311
+
312
+   if(check_values_less_than_choch_low(diff,i) == true)
313
+     {
314
+      if(iOpen(Symbol(),PERIOD_CURRENT,ind) < iOpen(Symbol(),PERIOD_CURRENT,i) && iClose(Symbol(),PERIOD_CURRENT,ind) > iClose(Symbol(),PERIOD_CURRENT,i))
315
+        {
316
+         Print("Place sell order -----------------------------------------------------------------------: ");
317
+        }
318
+
319
+
239 320
      }
240 321
 
241 322
    if(bearish_found == true)
@@ -264,45 +345,59 @@ void Entry_Action_1_up(int Store_bos_last_index, int i)
264 345
 //+------------------------------------------------------------------+
265 346
 //|                                                                  |
266 347
 //+------------------------------------------------------------------+
267
-void Entry_Action_1_down(int Store_bos_last_index, int i,int diff)
348
+bool check_values_less_than_choch_high(int diff,int i)             // downtrend
268 349
   {
269
-   diff++;
270
-
271
-   for(int j=Store_bos_last_index+1; j < iBars(Symbol(),PERIOD_CURRENT); j++)
350
+   bool found = false;
351
+   int value = (diff + i) - 1;
352
+   for(int k=value; k>i; k--)
272 353
      {
273
-      if(checkCandle(j) == "Bullish")
354
+
355
+      //Print("high values ",iHigh(Symbol(),PERIOD_CURRENT,k));
356
+      //Print("close values ",iClose(Symbol(),PERIOD_CURRENT,i));
357
+
358
+      if(iHigh(Symbol(),PERIOD_CURRENT,k) > iClose(Symbol(),PERIOD_CURRENT,i))
274 359
         {
275
-         ind = j;
276
-         bullish_found = true;
277
-         diff++;
278
-         break;
360
+         found = true;
279 361
         }
280
-
281 362
      }
282
-// Print(diff);
283
-   if(bullish_found == true)
363
+   if(found == true)
284 364
      {
365
+      return false;
285 366
 
286
-      ObjectCreate(0,"line14"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,ind),iHigh(Symbol(),PERIOD_CURRENT,ind),iTime(Symbol(),PERIOD_CURRENT,i),iHigh(Symbol(),PERIOD_CURRENT,ind));
287
-      ObjectCreate(0,"line15"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,ind),iLow(Symbol(),PERIOD_CURRENT,ind),iTime(Symbol(),PERIOD_CURRENT,i),iLow(Symbol(),PERIOD_CURRENT,ind));
367
+     }
288 368
 
289
-      ObjectSetInteger(0,"line14"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_COLOR,clrBlue);
290
-      ObjectSetInteger(0,"line15"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_COLOR,clrBlue);
369
+   return true;
291 370
 
292
-      ObjectCreate(0,"line16"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,ind),iClose(Symbol(),PERIOD_CURRENT,ind),iTime(Symbol(),PERIOD_CURRENT,i),iClose(Symbol(),PERIOD_CURRENT,ind));
293
-      ObjectCreate(0,"line17"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,ind),iOpen(Symbol(),PERIOD_CURRENT,ind),iTime(Symbol(),PERIOD_CURRENT,i),iOpen(Symbol(),PERIOD_CURRENT,ind));
294
-
295
-      ObjectSetInteger(0,"line16"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_STYLE,STYLE_DOT);
296
-      ObjectSetInteger(0,"line17"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_STYLE,STYLE_DOT);
371
+  }
297 372
 
298 373
 
374
+//+------------------------------------------------------------------+
375
+//|                                                                  |
376
+//+------------------------------------------------------------------+
377
+bool check_values_less_than_choch_low(int diff,int i)             // uptrend
378
+  {
379
+   bool found = false;
380
+   int value = (diff + i) - 1;      // from which it start to check value is less in index
381
+   Print("value to be start is ",value);
382
+   for(int k=value; k>i; k--)
383
+     {
299 384
 
385
+      if(iLow(Symbol(),PERIOD_CURRENT,k) < iClose(Symbol(),PERIOD_CURRENT,i))
386
+        {
387
+         found = true;
388
+        }
389
+     }
390
+   if(found == true)
391
+     {
392
+      return false;
300 393
 
394
+     }
301 395
 
302
-      bullish_found = false;
396
+   return true;
303 397
 
304
-     }
305 398
   }
399
+
400
+
306 401
 //+------------------------------------------------------------------+
307 402
 //|                                                                  |
308 403
 //+------------------------------------------------------------------+
@@ -323,7 +418,10 @@ void choch(int i)
323 418
 
324 419
          Print("last bos index is ",Store_bos_last_index);
325 420
 
326
-         Entry_Action_1_up(Store_bos_last_index,i);
421
+         int diff1 = Store_bos_last_index - (i);
422
+         Print("diff between bos and last choch is ",diff1);
423
+
424
+         Entry_Action_1_up(Store_bos_last_index,i,diff1);
327 425
 
328 426
          low = iLow(Symbol(),PERIOD_CURRENT,i);
329 427
          low_index = i;
@@ -337,6 +435,7 @@ void choch(int i)
337 435
 
338 436
          ObjectSetInteger(0,"low",OBJPROP_COLOR,clrRed);
339 437
 
438
+         // Entry_Action_1_up(Store_bos_last_index,i);
340 439
 
341 440
          Print("low update due to choch : ", low);
342 441
          trend = "downtrend";
@@ -362,16 +461,10 @@ void choch(int i)
362 461
          ObjectCreate(0,"line7"+iTime(Symbol(),PERIOD_CURRENT,i),OBJ_ARROW_UP,0,iTime(Symbol(),PERIOD_CURRENT,i),iLow(Symbol(),PERIOD_CURRENT,i)-100*Point());
363 462
          ObjectSetInteger(0,"line7"+iTime(Symbol(),PERIOD_CURRENT,i),OBJPROP_COLOR,clrGreen);
364 463
 
365
-
366
-         Print("last bos index is ",Store_bos_last_index);
367
-         int diff = Store_bos_last_index - i;
368
-         Print(diff);
464
+         int diff = Store_bos_last_index - (i);
369 465
 
370 466
          Entry_Action_1_down(Store_bos_last_index,i,diff);
371 467
 
372
-
373
-
374
-
375 468
          high = iHigh(Symbol(),PERIOD_CURRENT,i);
376 469
          high_index = i;
377 470
 
@@ -383,6 +476,7 @@ void choch(int i)
383 476
          ObjectCreate(0,"high",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,i),high,iTime(Symbol(),PERIOD_CURRENT,0),high);
384 477
          ObjectSetInteger(0,"high",OBJPROP_RAY_RIGHT,true);
385 478
          ObjectSetInteger(0,"high",OBJPROP_COLOR,clrBlue);
479
+
386 480
          trend = "uptrend";
387 481
 
388 482
          Print("high is update due to choch : ", high);
@@ -418,7 +512,7 @@ void third_Condition(int i)
418 512
 
419 513
            }
420 514
 
421
-        ObjectCreate(0,"low",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,i),low,iTime(Symbol(),PERIOD_CURRENT,0),low);
515
+         ObjectCreate(0,"low",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,i),low,iTime(Symbol(),PERIOD_CURRENT,0),low);
422 516
          ObjectSetInteger(0,"low",OBJPROP_RAY_RIGHT,true);
423 517
 
424 518
          ObjectSetInteger(0,"low",OBJPROP_COLOR,clrRed);
@@ -451,6 +545,9 @@ void third_Condition(int i)
451 545
      }
452 546
 
453 547
   }
548
+
549
+
550
+
454 551
 //+------------------------------------------------------------------+
455 552
 //|                                                                  |
456 553
 //+------------------------------------------------------------------+
@@ -463,14 +560,12 @@ void foo(int value)
463 560
       //Print("hi");
464 561
       //if(l < 2)
465 562
         {
563
+
466 564
          Bos(i);
467 565
          choch(i);
468
-
469 566
          third_Condition(i);
470 567
 
471 568
 
472
-
473
-
474 569
          l++;
475 570
 
476 571
         }
@@ -481,6 +576,8 @@ void foo(int value)
481 576
      }
482 577
 
483 578
   }
579
+
580
+
484 581
 //+------------------------------------------------------------------+
485 582
 //|                                                                  |
486 583
 //+------------------------------------------------------------------+
@@ -520,6 +617,10 @@ int OnInit()
520 617
 
521 618
    return(INIT_SUCCEEDED);
522 619
   }
620
+
621
+
622
+
623
+
523 624
 //+------------------------------------------------------------------+
524 625
 //| Expert deinitialization function                                 |
525 626
 //+------------------------------------------------------------------+
@@ -528,6 +629,9 @@ void OnDeinit(const int reason)
528 629
 //---
529 630
 
530 631
   }
632
+
633
+
634
+
531 635
 //+------------------------------------------------------------------+
532 636
 //| Expert tick function                                             |
533 637
 //+------------------------------------------------------------------+
@@ -555,6 +659,10 @@ bool NewBar()
555 659
      }
556 660
   }
557 661
 
662
+
663
+
664
+
665
+
558 666
 //+------------------------------------------------------------------+
559 667
 //|                                                                  |
560 668
 //+------------------------------------------------------------------+
@@ -567,6 +675,8 @@ bool object_find(string obj)    // to find object placed by user in the chart
567 675
    return false;
568 676
 
569 677
   }
678
+
679
+
570 680
 //+------------------------------------------------------------------+
571 681
 //|                                                                  |
572 682
 //+------------------------------------------------------------------+