AhtashamShahzad3 лет назад: 2
Родитель
Сommit
d102f9cd4b
2 измененных файлов с 150 добавлено и 40 удалено
  1. BIN
      BOS_CHOCH.ex5
  2. 150 40
      BOS_CHOCH.mq5

+ 150 - 40
BOS_CHOCH.mq5

@@ -13,6 +13,7 @@ input string object_name = "line";
13
 
13
 
14
 int ind = 0;
14
 int ind = 0;
15
 string trend;
15
 string trend;
16
+
16
 bool bearish_found = false;
17
 bool bearish_found = false;
17
 bool bullish_found = false;
18
 bool bullish_found = false;
18
 
19
 
@@ -27,6 +28,7 @@ int index_of_high = 0;
27
 
28
 
28
 int high_index=0;
29
 int high_index=0;
29
 int low_index =0;
30
 int low_index =0;
31
+
30
 double high,low,low1,high1,low2,high2;
32
 double high,low,low1,high1,low2,high2;
31
 
33
 
32
 int Store_bos_last_index = 0;
34
 int Store_bos_last_index = 0;
@@ -34,9 +36,6 @@ int Store_bos_last_index = 0;
34
 
36
 
35
 bool choch = false;
37
 bool choch = false;
36
 int index = 0;
38
 int index = 0;
37
-
38
-int arrow_code_high = 108;
39
-int arrow_code_low  = 108;
40
 //+------------------------------------------------------------------+
39
 //+------------------------------------------------------------------+
41
 //| Expert initialization function                                   |
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
    for(int j=Store_bos_last_index+1; j < iBars(Symbol(),PERIOD_CURRENT); j++)
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
       if(checkCandle(j) == "Bearish")
297
       if(checkCandle(j) == "Bearish")
233
         {
298
         {
234
-         ind = j;
299
+         ind = j;    // reversal candle index
235
          bearish_found = true;
300
          bearish_found = true;
236
          break;
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
    if(bearish_found == true)
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
          Print("last bos index is ",Store_bos_last_index);
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
          low = iLow(Symbol(),PERIOD_CURRENT,i);
426
          low = iLow(Symbol(),PERIOD_CURRENT,i);
329
          low_index = i;
427
          low_index = i;
@@ -337,6 +435,7 @@ void choch(int i)
337
 
435
 
338
          ObjectSetInteger(0,"low",OBJPROP_COLOR,clrRed);
436
          ObjectSetInteger(0,"low",OBJPROP_COLOR,clrRed);
339
 
437
 
438
+         // Entry_Action_1_up(Store_bos_last_index,i);
340
 
439
 
341
          Print("low update due to choch : ", low);
440
          Print("low update due to choch : ", low);
342
          trend = "downtrend";
441
          trend = "downtrend";
@@ -362,16 +461,10 @@ void choch(int i)
362
          ObjectCreate(0,"line7"+iTime(Symbol(),PERIOD_CURRENT,i),OBJ_ARROW_UP,0,iTime(Symbol(),PERIOD_CURRENT,i),iLow(Symbol(),PERIOD_CURRENT,i)-100*Point());
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
          ObjectSetInteger(0,"line7"+iTime(Symbol(),PERIOD_CURRENT,i),OBJPROP_COLOR,clrGreen);
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
          Entry_Action_1_down(Store_bos_last_index,i,diff);
466
          Entry_Action_1_down(Store_bos_last_index,i,diff);
371
 
467
 
372
-
373
-
374
-
375
          high = iHigh(Symbol(),PERIOD_CURRENT,i);
468
          high = iHigh(Symbol(),PERIOD_CURRENT,i);
376
          high_index = i;
469
          high_index = i;
377
 
470
 
@@ -383,6 +476,7 @@ void choch(int i)
383
          ObjectCreate(0,"high",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,i),high,iTime(Symbol(),PERIOD_CURRENT,0),high);
476
          ObjectCreate(0,"high",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,i),high,iTime(Symbol(),PERIOD_CURRENT,0),high);
384
          ObjectSetInteger(0,"high",OBJPROP_RAY_RIGHT,true);
477
          ObjectSetInteger(0,"high",OBJPROP_RAY_RIGHT,true);
385
          ObjectSetInteger(0,"high",OBJPROP_COLOR,clrBlue);
478
          ObjectSetInteger(0,"high",OBJPROP_COLOR,clrBlue);
479
+
386
          trend = "uptrend";
480
          trend = "uptrend";
387
 
481
 
388
          Print("high is update due to choch : ", high);
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
          ObjectSetInteger(0,"low",OBJPROP_RAY_RIGHT,true);
516
          ObjectSetInteger(0,"low",OBJPROP_RAY_RIGHT,true);
423
 
517
 
424
          ObjectSetInteger(0,"low",OBJPROP_COLOR,clrRed);
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
       //Print("hi");
560
       //Print("hi");
464
       //if(l < 2)
561
       //if(l < 2)
465
         {
562
         {
563
+
466
          Bos(i);
564
          Bos(i);
467
          choch(i);
565
          choch(i);
468
-
469
          third_Condition(i);
566
          third_Condition(i);
470
 
567
 
471
 
568
 
472
-
473
-
474
          l++;
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
    return(INIT_SUCCEEDED);
618
    return(INIT_SUCCEEDED);
522
   }
619
   }
620
+
621
+
622
+
623
+
523
 //+------------------------------------------------------------------+
624
 //+------------------------------------------------------------------+
524
 //| Expert deinitialization function                                 |
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
 //| Expert tick function                                             |
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
    return false;
675
    return false;
568
 
676
 
569
   }
677
   }
678
+
679
+
570
 //+------------------------------------------------------------------+
680
 //+------------------------------------------------------------------+
571
 //|                                                                  |
681
 //|                                                                  |
572
 //+------------------------------------------------------------------+
682
 //+------------------------------------------------------------------+