|
|
@@ -11,6 +11,14 @@ CTrade trade;
|
|
11
|
11
|
|
|
12
|
12
|
#define orderNum 200
|
|
13
|
13
|
|
|
|
14
|
+
|
|
|
15
|
+enum lotcalculator
|
|
|
16
|
+ {
|
|
|
17
|
+ fix, //Fixed Lot Size
|
|
|
18
|
+ rsk, //Risk Percentage
|
|
|
19
|
+ };
|
|
|
20
|
+
|
|
|
21
|
+
|
|
14
|
22
|
struct tradeOrder
|
|
15
|
23
|
{
|
|
16
|
24
|
|
|
|
@@ -43,7 +51,7 @@ enum entryCondition
|
|
43
|
51
|
two, // Entry A2
|
|
44
|
52
|
};
|
|
45
|
53
|
|
|
46
|
|
-input entryCondition Entry_condition_1 = one; // Entry Condition
|
|
|
54
|
+// input entryCondition Entry_condition_1 = one; // Entry Condition
|
|
47
|
55
|
|
|
48
|
56
|
sinput string str = "<><><><><><> Set Object Name <><><><><><>";
|
|
49
|
57
|
input string object_name = "line";
|
|
|
@@ -54,9 +62,12 @@ input datetime inpTime = 0;//First Line Draw t
|
|
54
|
62
|
|
|
55
|
63
|
sinput string str2 = "<><><><><><> Default Settings <><><><><><>";
|
|
56
|
64
|
input double lot_size = 0.1;
|
|
57
|
|
-input double stoploss = 20;
|
|
58
|
|
-input double takeProfit = 20;
|
|
59
|
|
-input int magic_no = 123;
|
|
|
65
|
+input lotcalculator lot_calculator = fix; //Lot Size Calculator
|
|
|
66
|
+
|
|
|
67
|
+input double risk = 1; //Risk in Percentage %
|
|
|
68
|
+input double stoploss = 20; // Stoploss Pips buffer from choch candle
|
|
|
69
|
+input double takeProfit = 20; // TakeProfit in Pips
|
|
|
70
|
+input int magic_no = 123; // Magic no
|
|
60
|
71
|
|
|
61
|
72
|
|
|
62
|
73
|
|
|
|
@@ -602,7 +613,10 @@ void choch(int i)
|
|
602
|
613
|
ObjectDelete(0,"target line");
|
|
603
|
614
|
}
|
|
604
|
615
|
|
|
605
|
|
- ObjectCreate(0,"target line",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,chock_index),iHigh(Symbol(),PERIOD_CURRENT,chock_index),iTime(Symbol(),PERIOD_CURRENT,0),iHigh(Symbol(),PERIOD_CURRENT,chock_index));
|
|
|
616
|
+ if(!ObjectCreate(0,"target line",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,chock_index),iHigh(Symbol(),PERIOD_CURRENT,chock_index),iTime(Symbol(),PERIOD_CURRENT,0),iHigh(Symbol(),PERIOD_CURRENT,chock_index)));
|
|
|
617
|
+ {
|
|
|
618
|
+ Print("object error ",GetLastError());
|
|
|
619
|
+ }
|
|
606
|
620
|
ObjectSetInteger(0,"target line",OBJPROP_RAY_RIGHT,true);
|
|
607
|
621
|
ObjectSetInteger(0,"target line",OBJPROP_COLOR,clrGreen);
|
|
608
|
622
|
|
|
|
@@ -622,7 +636,7 @@ void choch(int i)
|
|
622
|
636
|
Print("from where you end ",chock_index1);
|
|
623
|
637
|
|
|
624
|
638
|
bool condition_not_match = false;
|
|
625
|
|
- for(int p=chock_index +1 ; p >=chock_index1; p--)
|
|
|
639
|
+ for(int p=chock_index - 1 ; p >=chock_index1; p--)
|
|
626
|
640
|
{
|
|
627
|
641
|
if(iLow(Symbol(),PERIOD_CURRENT,p) < HIGH)
|
|
628
|
642
|
{
|
|
|
@@ -634,6 +648,7 @@ void choch(int i)
|
|
634
|
648
|
{
|
|
635
|
649
|
HIGH = 0.0;
|
|
636
|
650
|
LOW = 0.0;
|
|
|
651
|
+ Print("TArget line deleted");
|
|
637
|
652
|
condition_not_match = false;
|
|
638
|
653
|
|
|
639
|
654
|
if(object_find("target line") > 0)
|
|
|
@@ -775,7 +790,10 @@ void choch(int i)
|
|
775
|
790
|
ObjectDelete(0,"target line");
|
|
776
|
791
|
}
|
|
777
|
792
|
|
|
778
|
|
- ObjectCreate(0,"target line",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,chock_index),iHigh(Symbol(),PERIOD_CURRENT,chock_index),iTime(Symbol(),PERIOD_CURRENT,0),iHigh(Symbol(),PERIOD_CURRENT,chock_index));
|
|
|
793
|
+ if(!ObjectCreate(0,"target line",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,chock_index),iHigh(Symbol(),PERIOD_CURRENT,chock_index),iTime(Symbol(),PERIOD_CURRENT,0),iHigh(Symbol(),PERIOD_CURRENT,chock_index)));
|
|
|
794
|
+ {
|
|
|
795
|
+ Print("object error ",GetLastError());
|
|
|
796
|
+ }
|
|
779
|
797
|
ObjectSetInteger(0,"target line",OBJPROP_RAY_RIGHT,true);
|
|
780
|
798
|
ObjectSetInteger(0,"target line",OBJPROP_COLOR,clrGreen);
|
|
781
|
799
|
|
|
|
@@ -795,7 +813,7 @@ void choch(int i)
|
|
795
|
813
|
Print("from where you end ",chock_index1);
|
|
796
|
814
|
|
|
797
|
815
|
condition_not_match = false;
|
|
798
|
|
- for(int p=chock_index +1 ; p >=chock_index1; p--)
|
|
|
816
|
+ for(int p=chock_index - 1 ; p >=chock_index1; p--)
|
|
799
|
817
|
{
|
|
800
|
818
|
if(iLow(Symbol(),PERIOD_CURRENT,p) < HIGH)
|
|
801
|
819
|
{
|
|
|
@@ -805,6 +823,7 @@ void choch(int i)
|
|
805
|
823
|
|
|
806
|
824
|
if(condition_not_match == true)
|
|
807
|
825
|
{
|
|
|
826
|
+ Print("TArget line deleted");
|
|
808
|
827
|
HIGH = 0.0;
|
|
809
|
828
|
LOW = 0.0;
|
|
810
|
829
|
condition_not_match = false;
|
|
|
@@ -988,7 +1007,7 @@ void choch(int i)
|
|
988
|
1007
|
Print("from where you end ",chock_index1);
|
|
989
|
1008
|
|
|
990
|
1009
|
bool condition_not_match = false;
|
|
991
|
|
- for(int p=chock_index +1 ; p >=chock_index1; p--)
|
|
|
1010
|
+ for(int p=chock_index - 1 ; p >=chock_index1; p--)
|
|
992
|
1011
|
{
|
|
993
|
1012
|
if(iHigh(Symbol(),PERIOD_CURRENT,p) > LOW)
|
|
994
|
1013
|
{
|
|
|
@@ -998,6 +1017,7 @@ void choch(int i)
|
|
998
|
1017
|
|
|
999
|
1018
|
if(condition_not_match == true)
|
|
1000
|
1019
|
{
|
|
|
1020
|
+ Print("line target deleted :");
|
|
1001
|
1021
|
HIGH = 0.0;
|
|
1002
|
1022
|
LOW = 0.0;
|
|
1003
|
1023
|
condition_not_match = false;
|
|
|
@@ -1160,7 +1180,7 @@ void choch(int i)
|
|
1160
|
1180
|
Print("from where you end ",chock_index1);
|
|
1161
|
1181
|
|
|
1162
|
1182
|
condition_not_match = false;
|
|
1163
|
|
- for(int p=chock_index +1 ; p >=chock_index1; p--)
|
|
|
1183
|
+ for(int p=chock_index - 1 ; p >=chock_index1; p--)
|
|
1164
|
1184
|
{
|
|
1165
|
1185
|
if(iHigh(Symbol(),PERIOD_CURRENT,p) > LOW)
|
|
1166
|
1186
|
{
|
|
|
@@ -1172,6 +1192,7 @@ void choch(int i)
|
|
1172
|
1192
|
{
|
|
1173
|
1193
|
HIGH = 0.0;
|
|
1174
|
1194
|
LOW = 0.0;
|
|
|
1195
|
+ Print("line target deleted :");
|
|
1175
|
1196
|
condition_not_match = false;
|
|
1176
|
1197
|
|
|
1177
|
1198
|
if(object_find("target line") > 0)
|
|
|
@@ -1754,16 +1775,19 @@ void placeBuyTrade()
|
|
1754
|
1775
|
double sell_SL = 0,sell_Tp = 0, openPrice = 0,buySL = 0, buyTp = 0;
|
|
1755
|
1776
|
openPrice = SymbolInfoDouble(Symbol(),SYMBOL_ASK);
|
|
1756
|
1777
|
double Ask = SymbolInfoDouble(Symbol(),SYMBOL_ASK);
|
|
1757
|
|
-
|
|
1758
|
|
- if(stoploss != 0)
|
|
1759
|
|
- {
|
|
1760
|
|
- buySL = Ask - (stoploss *10* Point());
|
|
1761
|
|
- }
|
|
|
1778
|
+ int ch = iBarShift(Symbol(), PERIOD_CURRENT,choch_index_time,false); // get high of chock index
|
|
|
1779
|
+ buySL = iLow(Symbol(),PERIOD_CURRENT,ch) - stoploss *10 * Point();
|
|
|
1780
|
+//
|
|
|
1781
|
+// if(stoploss != 0)
|
|
|
1782
|
+// {
|
|
|
1783
|
+// buySL = Ask - (stoploss *10* Point());
|
|
|
1784
|
+// }
|
|
1762
|
1785
|
if(takeProfit != 0)
|
|
1763
|
1786
|
{
|
|
1764
|
1787
|
buyTp = Ask + (takeProfit *10* Point());
|
|
1765
|
1788
|
}
|
|
1766
|
|
- if(trade.PositionOpen(Symbol(),ORDER_TYPE_BUY,lot_size,Ask,buySL,buyTp,"Buy Trade Placed"))
|
|
|
1789
|
+ double distance = (Ask - buySL)/Point();
|
|
|
1790
|
+ if(trade.PositionOpen(Symbol(),ORDER_TYPE_BUY,getlot(distance),Ask,buySL,buyTp,"Buy Trade Placed"))
|
|
1767
|
1791
|
{
|
|
1768
|
1792
|
Print("Buy Trade Placed: ",trade.ResultOrder());
|
|
1769
|
1793
|
}
|
|
|
@@ -1773,7 +1797,54 @@ void placeBuyTrade()
|
|
1773
|
1797
|
}
|
|
1774
|
1798
|
|
|
1775
|
1799
|
}
|
|
|
1800
|
+//+------------------------------------------------------------------+
|
|
|
1801
|
+//| |
|
|
|
1802
|
+//+------------------------------------------------------------------+
|
|
|
1803
|
+double getlot(double stop_loss)
|
|
|
1804
|
+ {
|
|
|
1805
|
+ Print("Tick Value: ",SymbolInfoDouble(Symbol(),SYMBOL_TRADE_TICK_VALUE));
|
|
|
1806
|
+ Print("Tick Size: ",SymbolInfoDouble(Symbol(),SYMBOL_TRADE_TICK_SIZE));
|
|
|
1807
|
+ double modeTickV=SymbolInfoDouble(Symbol(),SYMBOL_TRADE_TICK_VALUE)
|
|
|
1808
|
+ ,modeTickS=SymbolInfoDouble(Symbol(),SYMBOL_TRADE_TICK_SIZE);
|
|
|
1809
|
+// Print("Pip value: ", NormalizeDouble(((SymbolInfoDouble(Symbol(),SYMBOL_TRADE_TICK_VALUE)/(SymbolInfoDouble(Symbol(),SYMBOL_TRADE_TICK_SIZE)/Point))*10),2));
|
|
|
1810
|
+ double pipvalue = NormalizeDouble(((SymbolInfoDouble(Symbol(),SYMBOL_TRADE_TICK_VALUE)/(SymbolInfoDouble(Symbol(),SYMBOL_TRADE_TICK_SIZE)/Point()))*10),2);
|
|
|
1811
|
+// pipvalue=NormalizeDouble((modeTickV/modeTickS/Point()),)
|
|
|
1812
|
+// pipvalue=
|
|
|
1813
|
+ pipvalue = pipvalue / 10;
|
|
|
1814
|
+ double lotSize = lot_size;
|
|
|
1815
|
+ if(lot_calculator==rsk) //calculating risk
|
|
|
1816
|
+ {
|
|
|
1817
|
+ double riskamount=(risk/100)*AccountInfoDouble(ACCOUNT_BALANCE);
|
|
|
1818
|
+ double pipvalue_required=riskamount/stop_loss;
|
|
|
1819
|
+ lotSize = pipvalue_required/pipvalue;
|
|
|
1820
|
+ //sl=riskamount/pipValuelot
|
|
|
1821
|
+ int roundDigit=0;
|
|
|
1822
|
+ double step=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_STEP);
|
|
|
1823
|
+
|
|
|
1824
|
+ while(step<1)
|
|
|
1825
|
+ {
|
|
|
1826
|
+ roundDigit++;
|
|
|
1827
|
+ step=step*10;
|
|
|
1828
|
+ }
|
|
|
1829
|
+ Print("Round Digits:",roundDigit);
|
|
|
1830
|
+ lotSize = NormalizeDouble(lotSize,roundDigit);
|
|
|
1831
|
+ //
|
|
|
1832
|
+ }
|
|
|
1833
|
+ Print("Lot Size: ",lotSize);
|
|
1776
|
1834
|
|
|
|
1835
|
+ if(lotSize > SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX))
|
|
|
1836
|
+ {
|
|
|
1837
|
+ lotSize=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX);
|
|
|
1838
|
+ }
|
|
|
1839
|
+ else
|
|
|
1840
|
+ if(lotSize<SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN))
|
|
|
1841
|
+ {
|
|
|
1842
|
+ lotSize=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN);
|
|
|
1843
|
+ }
|
|
|
1844
|
+
|
|
|
1845
|
+//---
|
|
|
1846
|
+ return lotSize;
|
|
|
1847
|
+ }
|
|
1777
|
1848
|
//+------------------------------------------------------------------+
|
|
1778
|
1849
|
//| |
|
|
1779
|
1850
|
//+------------------------------------------------------------------+
|
|
|
@@ -1784,18 +1855,20 @@ void placeSellTrade()
|
|
1784
|
1855
|
double sell_SL = 0,sell_Tp = 0, openPrice = 0, buySL = 0, buyTp = 0;
|
|
1785
|
1856
|
openPrice = SymbolInfoDouble(Symbol(),SYMBOL_BID);
|
|
1786
|
1857
|
double Bid = SymbolInfoDouble(Symbol(),SYMBOL_BID);
|
|
1787
|
|
-
|
|
1788
|
|
- if(stoploss != 0)
|
|
1789
|
|
- {
|
|
1790
|
|
- sell_SL = Bid + (stoploss *10* Point());
|
|
1791
|
|
- }
|
|
|
1858
|
+ int ch = iBarShift(Symbol(), PERIOD_CURRENT,choch_index_time,false); // get high of chock index
|
|
|
1859
|
+ sell_SL = iHigh(Symbol(),PERIOD_CURRENT,ch) + stoploss *10 * Point();
|
|
|
1860
|
+ double distance = (sell_SL - Bid)/Point();
|
|
|
1861
|
+//if(stoploss != 0)
|
|
|
1862
|
+// {
|
|
|
1863
|
+// sell_SL = Bid + (stoploss *10* Point());
|
|
|
1864
|
+// }
|
|
1792
|
1865
|
if(takeProfit != 0)
|
|
1793
|
1866
|
{
|
|
1794
|
1867
|
sell_Tp = Bid - (takeProfit *10* Point());
|
|
1795
|
1868
|
}
|
|
1796
|
1869
|
|
|
1797
|
1870
|
|
|
1798
|
|
- if(trade.PositionOpen(Symbol(),ORDER_TYPE_SELL,lot_size,Bid,sell_SL,sell_Tp,"Sell Trade Placed"))
|
|
|
1871
|
+ if(trade.PositionOpen(Symbol(),ORDER_TYPE_SELL,getlot(distance),Bid,sell_SL,sell_Tp,"Sell Trade Placed"))
|
|
1799
|
1872
|
{
|
|
1800
|
1873
|
Print("Sell Trade PLaced: ",trade.ResultOrder());
|
|
1801
|
1874
|
|
|
|
@@ -1822,27 +1895,27 @@ int OnInit()
|
|
1822
|
1895
|
|
|
1823
|
1896
|
int idx = 0;
|
|
1824
|
1897
|
|
|
1825
|
|
-//int user_input_index = iBarShift(Symbol(), PERIOD_CURRENT,inpTime, false);
|
|
1826
|
|
-//if(ObjectCreate(0,"line",OBJ_VLINE,0,inpTime,iLow(Symbol(),PERIOD_CURRENT,user_input_index)))
|
|
1827
|
|
-// {
|
|
1828
|
|
-// Print("vertical line created on chart : ");
|
|
1829
|
|
-// }
|
|
1830
|
|
-//else
|
|
1831
|
|
-// {
|
|
1832
|
|
-// Print("error in creating line : ");
|
|
1833
|
|
-// }
|
|
1834
|
|
-
|
|
1835
|
|
-
|
|
1836
|
|
- int user_input_index = iBarShift(Symbol(), PERIOD_CURRENT, D'2022.09.01 15:30:27', false);
|
|
1837
|
|
- if(ObjectCreate(0,"line",OBJ_VLINE,0,D'2022.09.01 15:30:27',iLow(Symbol(),PERIOD_CURRENT,user_input_index)))
|
|
|
1898
|
+ int user_input_index = iBarShift(Symbol(), PERIOD_CURRENT,inpTime, false);
|
|
|
1899
|
+ if(ObjectCreate(0,"line",OBJ_VLINE,0,inpTime,iLow(Symbol(),PERIOD_CURRENT,user_input_index)))
|
|
1838
|
1900
|
{
|
|
1839
|
|
- Print("object created on chart : ");
|
|
|
1901
|
+ Print("vertical line created on chart : ");
|
|
1840
|
1902
|
}
|
|
1841
|
1903
|
else
|
|
1842
|
1904
|
{
|
|
1843
|
|
- Print("object not created : ");
|
|
|
1905
|
+ Print("error in creating line : ");
|
|
1844
|
1906
|
}
|
|
1845
|
1907
|
|
|
|
1908
|
+
|
|
|
1909
|
+ //int user_input_index = iBarShift(Symbol(), PERIOD_CURRENT, D'2022.09.01 15:30:27', false);
|
|
|
1910
|
+ //if(ObjectCreate(0,"line",OBJ_VLINE,0,D'2022.09.01 15:30:27',iLow(Symbol(),PERIOD_CURRENT,user_input_index)))
|
|
|
1911
|
+ // {
|
|
|
1912
|
+ // Print("object created on chart : ");
|
|
|
1913
|
+ // }
|
|
|
1914
|
+ //else
|
|
|
1915
|
+ // {
|
|
|
1916
|
+ // Print("object not created : ");
|
|
|
1917
|
+ // }
|
|
|
1918
|
+
|
|
1846
|
1919
|
object_find(object_name);
|
|
1847
|
1920
|
if(object_find(object_name) == true)
|
|
1848
|
1921
|
{
|
|
|
@@ -2022,7 +2095,7 @@ void OnTick()
|
|
2022
|
2095
|
if(od_1[m].EntryCon == 1 && iTime(Symbol(),PERIOD_CURRENT,1) == od_1[m].Time_of_candle_For_trade && od_1[m].Signal == "sell" && od_1[m].Time_of_candle_For_trade != 0 /*&& HIGH != 0 && LOW != 0*/)
|
|
2023
|
2096
|
{
|
|
2024
|
2097
|
|
|
2025
|
|
- Print("i am in enrtry condition 1 : ");
|
|
|
2098
|
+ //Print("i am in enrtry condition 1 : ");
|
|
2026
|
2099
|
|
|
2027
|
2100
|
// Print("time is greater and signal is sell ",TimeCurrent());
|
|
2028
|
2101
|
|
|
|
@@ -2063,7 +2136,7 @@ void OnTick()
|
|
2063
|
2136
|
if(od_1[m].EntryCon == 2 && TimeCurrent() > od_1[m].Time_of_candle_For_trade && od_1[m].Signal == "buy" && od_1[m].Time_of_candle_For_trade != 0 /*&& HIGH != 0 && LOW != 0*/)
|
|
2064
|
2137
|
{
|
|
2065
|
2138
|
// Print("time is greater and signal is buy ",TimeCurrent());
|
|
2066
|
|
- Print("i am in enrtry condition 1 : ");
|
|
|
2139
|
+ // Print("i am in enrtry condition 1 : ");
|
|
2067
|
2140
|
|
|
2068
|
2141
|
int reversal_indexx = iBarShift(Symbol(), PERIOD_CURRENT,od_1[m].reversal_index_date_time,false);
|
|
2069
|
2142
|
int close_index = iBarShift(Symbol(), PERIOD_CURRENT,od_1[m].choch_index_date_time,false);
|