إلى الأمام
تقبل الله منكم
Printable View
إلى الأمام
تقبل الله منكم
متابع ان شاء الله وبالتوفيق
ورجاء يكون فيه شرح اكثر لكيفية البرمجه
جزاكم الله خيرا
تابع معنا وأي إستفسار إسأل وإذا كنت ما زلت تتعلم البرمجة فراجع دروس المهندس وضاح
فكرة الإكسبرت ستكون كالآتي :
عندما يجتمع عنصرين أو أكثر وسنضيف خيار للتحكم بكم عنصر يجب أن يوجد ليتم الدخول كذلك سنضيف خيار في خصائص الإكسبرت للمسافة المسموحة بين سعر الدخول والمسافة بين الدعم أو المقاومة الموجودة .
الآن في المشاركة السابقة أضفنا كود خطوط الكامريلا وخطوط البيفوت لاينز
سنضيف الآن البولينجر باند والموفينج أفريج 55
وهاي ولو اليوم السابق
الكود سيكون كالتالي
كود PHP:double Ma=iMA(NULL,0,55,0,MODE_SMA,PRICE_CLOSE,0);
double BandUp=iBands(NULL,0 ,20,2,0,PRICE_CLOSE,MODE_UPPER,0);
double BandLow=iBands(NULL,0,20,2,0,PRICE_CLOSE,MODE_LOWER,0); double DailyHigh=iHigh(NULL,1440,1);
double DailyLow=iLow(NULL,1440,1);
بالنسبة للإخوة الذي تعاملوا مع الإستراتيجية لدي سؤال سريع لهم
على سبيل المثال في الحالة الأولى للإستراتيجية
نقطة الدخول شورت :
عند وصول السعر عند مستوى H4 وتجد معه R1 وتجد معه أي مقاومة أخرى مثل الخط العلوي للبولينجر أو موفينج 55 أو هاي اليوم السابق
السؤال هل يتم الدخول مباشرة أم ننتظر إغلاق الشمعة أسفل هذا المستوى وكذلك بالنسبة لباقي الشروط هل يتم الدخول مباشرة من المستوى القوي أم ننتظر إغلاق الشمعة
منتظر الإجابة لنكمل الإكسبرت بإذن الله
سنستخدم مؤشرين لإستخراج الديفرجنس مؤشر FX5_MACD_Divergence_V1
ومؤشر EWO_Divergence_v1
وسيتم إستدعائكم بالدالة icustom
حسب الكود
هذه المؤشرات تعطي قيمة خالية empty_value في حالة عدم وجود ديفرجنس وتعطي قيمة في حالة وجود ديفرجنس سيكون الكود معرفة وجود ديفرجنس أو لا كالآتيكود PHP:fx0=iCustom(NULL, 0, "FX5_MACD_Divergence_V1[1].1", "", 12, 26, 9, "", false, false, false, 0, 2);
fx00=iCustom(NULL, 0, "FX5_MACD_Divergence_V1[1].1", "", 12, 26, 9, "", false, false, false,1, 2);
ewo2=iCustom(NULL, 0, "EWO_Divergence_v1", "",5,34,5,"",0.0001,-0.0001,0.0,false,false,2,1);
ewo3=iCustom(NULL, 0, "EWO_Divergence_v1", "",5,34,5,"",0.0001,-0.0001,0.0,false,false,3,1);
المؤشرات ف المرفقاتكود PHP:if(fx0!=EMPTY_VALUE){fxbuy=1;}
if(fx00!=EMPTY_VALUE){fxsell=1;}
if(ewo2<EMPTY_VALUE){ewobuy=1;}
if(ewo3!=EMPTY_VALUE){ewosell=1;}
أعتقد أن الإخوة بدأوا يملون من كثرة الأكواد :asvc:
على العموم الخطوة الأخيرة والإكسبرت سيكون جاهز اليوم مساء بإذن الله
كود إستخراج نماذج الهارمونيك ونماذج الشموع
مؤشر الهارمونيك المستخدم في المرفقات
لو لاحظتم في الأكواد عند تكون نموذج قمت بتعريف متغيرات عدد صحيح من نوع int وتكون قيمته 0 وعند تكون النموذج يأخذ الرقم 1كود PHP:double GU=iCustom(Symbol(),GartleyTimeFrame,"Gartley v102",2,1);
double GD=iCustom(Symbol(),GartleyTimeFrame,"Gartley v102",5,1);
double PointD=iCustom(Symbol(),GartleyTimeFrame,"Gartley v102",3,1);
bool GartleyTrendUP=false;
bool GartleyTrendDN=false;
for(int o=1;o<=500;o++)
{
if(GartleyTrendUP!=false||GartleyTrendDN!=false)continue;
if(iCustom(Symbol(),GartleyTimeFrame,"Gartley v102",2,o)>0&&iCustom(Symbol(),GartleyTimeFrame,"Gartley v102",2,o)!=EMPTY_VALUE)GartleyTrendUP=true;
if(iCustom(Symbol(),GartleyTimeFrame,"Gartley v102",5,o)>0&&iCustom(Symbol(),GartleyTimeFrame,"Gartley v102",5,o)!=EMPTY_VALUE)GartleyTrendDN=true;
}
if(((UseGartley&&((TradeOncePerSignal&&GU!=NbGart))&&((TradeAtSignal&&GU>0&&GU!=EMPTY_VALUE))))
)
{ Gartleybuy=1;
NbGart=GU;
if(UsePreviousBarSL)StopLoss=(Ask-Low[1])/point;
if((UsePreviousBarSL)&&StopLoss<15)StopLoss=15;
if(UseATRTP)TakeProfit=(iATR(Symbol(),ATRTPTimeFrame,ATRTPPeriod,1)*ATRTPFactor)/point;
if((UseATRTP)&&TakeProfit<10)TakeProfit=10;
}
if(((UseGartley&&((TradeOncePerSignal&&GD!=NbGart))&&((TradeAtSignal&&GD>0&&GD!=EMPTY_VALUE))))
)
{ Gartleysell=1;
NbGart=GD;
if(UsePreviousBarSL)StopLoss=(High[1]-Bid)/point;
if((UsePreviousBarSL)&&StopLoss<15)StopLoss=15;
if(UseATRTP)TakeProfit=(iATR(Symbol(),ATRTPTimeFrame,ATRTPPeriod,1)*ATRTPFactor)/point;
if((UseATRTP)&&TakeProfit<10)TakeProfit=10;
}
/////////////////pattern //////////////////////////
int shift,shift1,shift2,shift3,shift4;
double Candle_WickBody_Percent = 0.9;
int CandleLength = 12;
double Doji_Star_Ratio = 0;
double Doji_MinLength = 0;
double Star_MinLength = 0;
int Star_Body_Length = 5;
int Engulfing_Length = 25;
double Piercing_Line_Ratio = 0.5;
int Piercing_Candle_Length = 10;
double O, O1, O2, C, C1, C2, C3, L, L1, L2, L3, H, H1, H2, H3;
double CL, CLmin, CL1, CL2, BL, BLa, BL90, BL1, BL2, UW, UWa, UW1, UW2, LW, LWa, LW1, LW2, BodyHigh, BodyLow;
BodyHigh = 0;
BodyLow = 0;
shift1 = 1;
shift2 = 2;
shift3 = 3;
shift4 = 4;
O = Open[shift1];
O1 = Open[shift2];
O2 = Open[shift3];
H = High[shift1];
H1 = High[shift2];
H2 = High[shift3];
H3 = High[shift4];
L = Low[shift1];
L1 = Low[shift2];
L2 = Low[shift3];
L3 = Low[shift4];
C = Close[shift1];
C1 = Close[shift2];
C2 = Close[shift3];
C3 = Close[shift4];
if (O>C) {
BodyHigh = O;
BodyLow = C; }
else {
BodyHigh = C;
BodyLow = O; }
CL = High[shift1]-Low[shift1];
CL1 = High[shift2]-Low[shift2];
CL2 = High[shift3]-Low[shift3];
BL = Open[shift1]-Close[shift1];
UW = High[shift1]-BodyHigh;
LW = BodyLow-Low[shift1];
BLa = MathAbs(BL);
BL90 = BLa*Candle_WickBody_Percent;
// Bearish Patterns
// Check for Bearish Shooting ShootStar
if ((H>=H1)&&(H>H2)&&(H>H3)) {
if (((UW/2)>LW)&&(UW>(2*BL90))&&(CL>=(CandleLength*point))&&(O!=C)&&((UW/3)<=LW)&&((UW/4)<=LW)) {
shootingstar=1;
}}
if ((H>=H1)&&(H>H2)&&(H>H3)) {
if (((UW/3)>LW)&&(UW>(2*BL90))&&(CL>=(CandleLength*point))&&(O!=C)&&((UW/4)<=LW)) {
shootingstar=1;}}
if ((H>=H1)&&(H>H2)&&(H>H3)) {
if (((UW/4)>LW)&&(UW>(2*BL90))&&(CL>=(CandleLength*point))&&(O!=C)) {
shootingstar=1;}}
// Check for Evening Star pattern
if ((H>=H1)&&(H1>H2)&&(H1>H3)) {
if ((BLa<(Star_Body_Length*point))&&(C2>O2)&&(!O==C)&&((C2-O2)/(0.001+H2-L2)>Doji_Star_Ratio)&&(C1>O1)&&(O>C)&&(CL>=(Star_MinLength*point))){
eveningstar=1;}}
// Check for Evening Doji Star pattern
if ((H>=H1)&&(H1>H2)&&(H1>H3)) {
if ((O==C)&&((C2>O2)&&(C2-O2)/(0.001+H2-L2)>Doji_Star_Ratio)&&(C1>O1)&&(CL>=(Doji_MinLength*point))) {
eveningdoji=1;}}
// Bullish Patterns
// Check for Bullish Hammer
if ((L<=L1)&&(L<L2)&&(L<L3)) {
if (((LW/2)>UW)&&(LW>BL90)&&(CL>=(CandleLength*point))&&(O!=C)&&((LW/3)<=UW)&&((LW/4)<=UW)) {
bullishhammer=1;}}
if ((L<=L1)&&(L<L2)&&(L<L3)) {
if (((LW/3)>UW)&&(LW>BL90)&&(CL>=(CandleLength*point))&&(O!=C)&&((LW/4)<=UW)) {
bullishhammer=1;}}
if ((L<=L1)&&(L<L2)&&(L<L3)) {
if (((LW/4)>UW)&&(LW>BL90)&&(CL>=(CandleLength*point))&&(O!=C)) {
bullishhammer=1;}}
// Check for Morning Star
if ((L<=L1)&&(L1<L2)&&(L1<L3)) {
if ((BLa<(Star_Body_Length*point))&&(!O==C)&&((O2>C2)&&((O2-C2)/(0.001+H2-L2)>Doji_Star_Ratio))&&(O1>C1)&&(C>O)&&(CL>=(Star_MinLength*point))) {
morningstar=1;}}
// Check for Morning Doji Star
if ((L<=L1)&&(L1<L2)&&(L1<L3)) {
if ((O==C)&&((O2>C2)&&((O2-C2)/(0.001+H2-L2)>Doji_Star_Ratio))&&(O1>C1)&&(CL>=(Doji_MinLength*point))) {
morningdoji=1;}}
ثم في الكود التالي أضفنا الإحتمالات الشورت أو اللونج
ثم أضفنا إحتمالات الإرتداد من مستوى دعم أو مقاومةكود PHP:probbuy=bullishhammer+morningstar+morningdoji+Gartleybuy+fxbuy+ewobuy;
probsell=shootingstar+eveningstar+eveningdoji+Gartleysell+fxsell+ewosell;
كود PHP:int M1,M2,M3,M4,M5,M6,M7,M8,M9,M10;
M1=0;M2=0;M3=0;M4=0;M5=0;M6=0;M7=0;M8=0;M9=0;M10=0;
if((High[1]>=h4+Distance*point)||(High[1]>=h3+Distance*point)||(High[1]>=h2+Distance*point)||(High[1]>=h1+Distance*point)){M1=1;}
if((High[1]>=r1+Distance*point)||(High[1]>=r2+Distance*point)||(High[1]>=r3+Distance*point)||(High[1]>=Pivot+Distance*point)){M2=1;}
if(High[1]>=BandUp+5*point){M3=1;}
if(High[1]>=DailyHigh+Distance*point){M4=1;}
if(High[1]>=Ma+Distance*point){M5=1;}
if((Low[1]<=l4-Distance*point)||(Low[1]<=l3-Distance*point)||(Low[1]<=l2+Distance*point)||(Low[1]<=l1+Distance*point)){M6=1;}
if((Low[1]<=s1-Distance*point)||(Low[1]<=s2-Distance*point)||(Low[1]<=l3-Distance*point)||(Low[1]<=Pivot-Distance*point)){M7=1;}
if(Low[1]<=BandLow-5*point){M8=1;}
if(Low[1]<=DailyLow-Distance*point){M9=1;}
if(Low[1]<=Ma-Distance*point){M10=1;}
int BounceBuy=0;int BounceSell=0;
BounceBuy=M6+M7+M8+M9+M10;
BounceSell=M1+M2+M3+M4+M5;
ليس ثمة ملل؛ بل شوق
مشتاق إلى أن أرى اكسبيرت تلك الاستراتيجية التي طالما سمعت عنها
أسأل الله تعالى أن يوفقك يا اخي وكل الإخوة الكرام ويتقبل منكم ويجعل فيكم الخير والبركة
أخي الكريم ..دولار
ما شاء الله عليك في البرمجة
انا مازلت جديد في برمجة المؤشرات ناهيك عن الاستراتيجيات
انا جالس ادرس في الأكواد التي وضعتها بالتفصيل
و ان شاء الله في ميزان حسناتك كل الذي استفدناه
يعطيك العافية اخي دولار على جهودك في عمل هذا الاكسبيرت وجعله الله في ميزان حسناتك وان شاء الله يكون اكسبيرت قوي لان الاستراتيجية فعلا قويه والسنين اثبتت ذلك .
عندي اقتراح كنت احلم به وان شاء الله على ايدك يتحقق الحلم واتمنى انك تقدر تسويه هل ممكن تعملنا مؤشر ينبهنا الى انه تم اجتماع العنصر العناصر كذا وكذا . مثلا اجتمع ثلاثة عناصر وهذه هي فرصة الدخول ينبهني المؤشر مثلا بالكتابه على يسار الشات في الاعلى بالعناصر . وعلى اخر شمعة ( اي عند الفرصة )يعطيني سهم للاتجاه المتوقع ويكون ثابت وغير متغير وذلك للاستفادة من الباك تيست ومراجعة الخطا في الفرصة اذا عكس علينا السعر .
اتمنى ان يكون عمل المؤشر سهلا وخاصة بعد ان قمت بعمل الكود للاكسبيرت هذا اذا الكود لا يختلف كثير بين الاكسبيرت والمؤشر .
عمل رائع و متقن متابع معك اخي دولار و منتضرين تجميع الكود النهائى
BounceBuy=M6+M7+M8+M9+M10;
BounceSell=M1+M2+M3+M4+M5;
هل سوف تستعمل خاصية الجمع لمعرفه ما هي أعلى قيمة هل هي للشراء أم للبيع
لم أفهم قصدك .
كما لاحظت في الكود فقط أعطيك لخطوط الدعم والمقاومة والكامريلا وحدي البولينجر المتغيرات M1 ,M2,M3إلى 10 وأعطيتها القيمة 0 وعندما يكون السعر قريب من هذه المستويات بمسافة Distance يتم تحديدها من متغيرات الإكسبرت الخارجية تتحول قيمة هذه المتغيرات إلى 1 حسب المستوى والمتغيرا BounceBuy ,BounceSell يقوم بجمع المتغيرات الأولى ويقوم بإخراج هذه القيمة لمعرفة عدد المستويات التي يتوقع أن يرتد منها السعر و الموجوده في هذه المنطقة السعرية وفي متغيرات الإكسبرت الخارجية قمت بوضع متغير MinimumBounceLines بحيث يمكن تحديده بأقل عدد للمستويات السعرية لكي يتم الدخول في الصفقة سواء بيع أو شراء فمثلا إذا جعلتها 2 فلن يدخل الإكسبرت الصفقة إلا إذا وجد على الأقل مستويين قويين أمام السعر يتوقع الإرتداد منها
ونفس الكلام أضفته في إستخراج النماذج عن طريق المتغيرين probbuy و probsell
يجب إتقان الطريقة جيدا يدويا لكي يمكن برمجتها كما يمكنبل يجب عندها إضافة مزايا حاسوبية لا يمكن في السابق القيام بها و يمكن للحاسوب فعل ذلك .
أنا لم أتعمق في الطريقة سابقا رغم ان الكل يثني عليها لذا هل يوجد موضوع أو ورشة لهذه الطريقة .