![]() |
رد: دورة تعليم برمجة الاكسبريت
شباب هل الشرح مفهوم او غير مفهوم
عندما لا اري تفاعل اشك انني لم اوصل المعلومة كما يجب |
رد: دورة تعليم برمجة الاكسبريت
شكرا ياباشا علي المجهود الرائع
|
رد: دورة تعليم برمجة الاكسبريت
عمل اكسبريت متطور نوع ما لمؤشر RSI
سنضع فيه الستوب لوز التيك بروفيت حجم العقد اضافتا الي دالة ملاحقة الربح مع الاخذ في الحسبان الدخول حسب اتجاه مؤشر ال zigzag بحيث لو تشكلة قمة جديدة سندخل sell فقط وان تشكل قاع جديد سندخل buy فقط |
رد: دورة تعليم برمجة الاكسبريت
متابعين معاك اخى مصطفى
عندى فكرة لعمل اكسبريت يعتمد على مؤشر rsi بشكل مختلف وبالتوفيق حبيبى |
رد: دورة تعليم برمجة الاكسبريت
اقتباس:
|
رد: دورة تعليم برمجة الاكسبريت
نبدء علي بركة الله بالقالب الجاهز التالي
[PHP] extern int StopLoss=0; extern int TakeProfit=0; extern int MagicNumber=2233; extern int MaxTrades = 1; extern double Lots = 0.1; double point; int digits,Q; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { if(Digits==5||Digits==3)Q=10; else Q=1; if(Digits==2) { point=0.01; } if(Digits==4) { point=0.0001; } if(Digits==3) { point=0.01; } if(Digits==5) { point=0.0001; } return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---- //---- return(0); } //+------------------------------------------------------------------+ [/PHP] وقد شرحنا كل كتابة فيما سبق |
رد: دورة تعليم برمجة الاكسبريت
نضيف RSI للشمعة الحالية
[PHP] double rsi=iRSI(0,0,periodRSI,appliedRSI,shift); [/PHP] ونضيف هذه المتغيرات الخارجية لكي نتحكم في اعددات RSI خارج الدالة start [PHP] extern int periodRSI=14; للتحكم في دور extern int appliedRSI=0; للتحكم في التطبيق علي الاغلاقات او الافتتاحات ...اخ extern int shift=0; للتحكم في الشمعة نضع 0 للحالية و 1 للسابقة وهكذا [/PHP] |
رد: دورة تعليم برمجة الاكسبريت
اذا سيصبح الكود بعد اضافة rsi والمتغيرات الخارجية
[PHP] extern int periodRSI=14; extern int appliedRSI=0; extern int shift=0; extern int StopLoss=0; extern int TakeProfit=0; extern int MagicNumber=2233; extern int MaxTrades = 1; extern double Lots = 0.1; double point; int digits,Q; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { if(Digits==5||Digits==3)Q=10; else Q=1; if(Digits==2) { point=0.01; } if(Digits==4) { point=0.0001; } if(Digits==3) { point=0.01; } if(Digits==5) { point=0.0001; } return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---- double rsi=iRSI(0,0,periodRSI,appliedRSI,shift); //---- return(0); } //+------------------------------------------------------------------+ [/PHP] |
رد: دورة تعليم برمجة الاكسبريت
يجب الان اضافة مؤشر zigzag لكي نكمل الاكسبريت
للتذكرير هذه طريقة وضعتها بالصدفة ولم اتاجر عليها من قبل والهدف منها هو تعليمي فقط واذا اي احد له فكرت اكسبريت تعتمد علي rsi فليضعها وسيتم تنفيذها كمثال سننتقل الي دورة المؤشرات لكي اعرف بعض الامور نحتاجها في بقية البرنامج دورة تعلم البرمجة باحتراف |
رد: دورة تعليم برمجة الاكسبريت
ربنا معاك يا اخى
ويارب يرزقك الجنة ويزيدك من علمه |
رد: دورة تعليم برمجة الاكسبريت
هل انتهى الموضوع......... الله يعينك يا اخونا فوفينج........ بالنسبة لل rsi كيف نضيف المستوياتniveaux ......
|
رد: دورة تعليم برمجة الاكسبريت
مشكور استاذ موفنج على هذه الدروس بارك الله فيك
ولو تكرمت وكان عندك وقت تكمل الدورة لاني فعلا استفذت منها |
رد: دورة تعليم برمجة الاكسبريت
1 مرفق
الواجب في المرفقات
اكسبريت للموفنج او المؤشر الذي قمت بعمله من موضوع http://fx-arabia.net/vb/showthread.php?t=27491 طبعا هو فيه اخطا ولو تكرمت شرح سببها لاني لم اقدر على تصحيحها وهي انه يفتح 5 صفقات مباشرة وانا وضعت دالة تحديد عدد الصفقات بصفقة واحدة فقط ايضا انه يفتح بيع فقط ولا يغلق الصفقة لو لم تكن هناك بروفت واستوب تحياتي |
رد: دورة تعليم برمجة الاكسبريت
اقتباس:
حاول تضع الكود فقط هنا علي الصفحة وسنناقش الامور الخاطئة ان شاء الله |
رد: دورة تعليم برمجة الاكسبريت
اقتباس:
كود:
extern double Lots = 0.1; |
رد: دورة تعليم برمجة الاكسبريت
هذا هو الكود الذي استخدمته
سننتقل من كلمة الي كلمة لكي نكتشف الاخضاء الكثيرة التي وقعت فيها |
رد: دورة تعليم برمجة الاكسبريت
[PHP]
extern double Lots = 0.1; double point; int digits,Q; extern int StopLoss=0; extern int TakeProfit=0; extern int MaxTrades = 1; extern int MagicNumber=1234; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { if(Digits==5||Digits==3)Q=10; else Q=1; if(Digits==2) { point=0.01; } if(Digits==4) { point=0.0001; } if(Digits==3) { point=0.01; } if(Digits==5) { point=0.0001; } int magic=0 ; //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } [/PHP] في هذا الجزء كل شئ جيد وبالنسبة لهذه الكتابة [PHP] int magic=0 ; [/PHP] ماهو هدفها ؟؟؟ سنتابع ونعرف |
رد: دورة تعليم برمجة الاكسبريت
بالنسبة للدوال خارج الدالة start
[PHP] int orderstotal(){ int cnt=0; for(int i =0;i<OrdersTotal();i++){ OrderSelect(i,SELECT_BY_POS,MODE_TRADES); if(OrderSymbol()==Symbol() && MagicNumber==OrderMagicNumber()){ cnt++; } } return(cnt); } [/PHP]دالة تحسب عدد الصفقات التي فتحها الاكسبريت وهي صحيحة |
رد: دورة تعليم برمجة الاكسبريت
ندخل الي الدالة start
مع التذكير ان هذه الدالة تعيد ما كتب فيها كل تغير في السعر |
رد: دورة تعليم برمجة الاكسبريت
هنا عرفنا متغيرين واسندنا الهم قيم المؤشر الخارجي الذي اسمه imad
ياريت ترفق المؤشر الخارجي لكي نفحصه ايضا [PHP] double indigreen=iCustom(0,0,"imad ",1,1); double indired=iCustom(0,0,"imad ",0,1); [/PHP] |
رد: دورة تعليم برمجة الاكسبريت
اقتباس:
[PHP]#property indicator_chart_window #property indicator_buffers 4 #property indicator_color1 Red #property indicator_color2 Blue #property indicator_color3 Yellow #property indicator_color4 Lime #property indicator_width1 2 #property indicator_width2 2 #property indicator_width3 2 #property indicator_width4 2 double CrossUp1[]; double CrossDown1[]; double FastMA[]; double SlowMA[]; int width=EMPTY; color clr=CLR_NONE; extern int ExtPeriodFastMA = 8; extern int ExtPeriodSlowMA = 14; extern int ExtModeFastMA = 0; extern int ExtModeSlowMA = 0; extern int ExtPriceFastMA = 0; extern int ExtPriceSlowMA = 0; extern bool showMA=true; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexStyle( 0, DRAW_ARROW, EMPTY); SetIndexArrow(0, 234); SetIndexBuffer(0, CrossDown1); SetIndexStyle( 1, DRAW_ARROW, EMPTY); SetIndexArrow(1, 233); SetIndexBuffer(1, CrossUp1); SetIndexStyle( 2, DRAW_LINE ); SetIndexBuffer( 2, FastMA ); SetIndexStyle( 3, DRAW_LINE ); SetIndexBuffer( 3, SlowMA ); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int x,i, counter; double Range, AvgRange; int counted_bars=IndicatorCounted(); if(counted_bars<0) return(-1); if(counted_bars>0) counted_bars--; x=Bars-counted_bars; for(i =0 ; i<x ; i++) { if(showMA==true) { FastMA[i] = iMA( NULL, 0, ExtPeriodFastMA, 0, ExtModeFastMA, ExtPriceFastMA, i ); SlowMA[i] = iMA( NULL, 0, ExtPeriodSlowMA, 0, ExtModeSlowMA, ExtPriceSlowMA, i ); } Range=0; AvgRange=0; for (counter=i ;counter<=i+9;counter++) { AvgRange=AvgRange+MathAbs(High[counter]-Low[counter]); } Range=AvgRange/10; double fasterEMAprevious=iMA( NULL, 0, ExtPeriodFastMA, 0, ExtModeFastMA, ExtPriceFastMA, i+1 ); double fasterEMAprevious1=iMA( NULL, 0, ExtPeriodFastMA, 0, ExtModeFastMA, ExtPriceFastMA, i+2 ); double slowerEMAprevious =iMA( NULL, 0, ExtPeriodSlowMA, 0, ExtModeSlowMA, ExtPriceSlowMA, i+1 ); double slowerEMAprevious1 =iMA( NULL, 0, ExtPeriodSlowMA, 0, ExtModeSlowMA, ExtPriceSlowMA, i+2 ); if(fasterEMAprevious<slowerEMAprevious&&fasterEMAp revious1>slowerEMAprevious1) { CrossDown1[i+1]=High[i+1]+Range*0.5; } if(fasterEMAprevious>slowerEMAprevious&&fasterEMAp revious1<slowerEMAprevious1) { CrossUp1[i+1]=Low[i+1]-Range*0.5; } } //---- //---- return(0); } //+------------------------------------------------------------------+[/PHP] |
رد: دورة تعليم برمجة الاكسبريت
اقتباس:
|
رد: دورة تعليم برمجة الاكسبريت
[PHP]
double indigreen=iCustom(0,0,"imad ",1,1); هذا يرمز للسهم الازرق في الشمعة السابقة double indired=iCustom(0,0,"imad ",0,1); وهذا يرمز للسهم الاحمر في الشمعة السابقة [/PHP] و نداء المؤشر صحيح اذا كان اسم المؤشر الذي واضعه مع المؤشرات imad |
رد: دورة تعليم برمجة الاكسبريت
يعني الفكرة انك تشتري او تبيع بضهور احد السهمين
الا هنا كل شئ صحيح |
رد: دورة تعليم برمجة الاكسبريت
ننتقل الي السطر الموالي
[PHP] if(orderstotal()<MaxTrades&&indigreen<4000) if(orderstotal()<MaxTrades&&indired<4000) [/PHP]وضعنا شرط ضهور السهم لاكن لم نضع بعده اي عمل يقوم به الاكسبريت يعني هنا هذه الكتابة غير صحيحة نحذفها تماما |
رد: دورة تعليم برمجة الاكسبريت
هنا ايضا هذه الكتابة غير صحيحة
[PHP] double TP; double SL; TP=Ask+TakeProfit*point; SL=Ask-StopLoss*point; TP=Bid-TakeProfit*point; SL=Bid+StopLoss*point; [/PHP] لماذا الكتابه غير صحيحة سنشرحها خطوة بخطوة |
رد: دورة تعليم برمجة الاكسبريت
[PHP]
double TP; هنا التعريف صحيح double SL; هنا التعريف صحيح المشكلة في التالي TP=Ask+TakeProfit*point; جعلنا قيمة TP تساوي السعر الحالي Ask واضفنا له عدد النقاط التي نريدها SL=Ask-StopLoss*point; جعلنا قيمة SL تساوي السعر الحالي Ask وانقصنا منه عدد النقاط التي نريدها هذه الكتابة صحيحة فقط عند تنفيذ اوامر buy اولا وعند تنفيذ اوامر sell فهي غير صحيحة TP=Bid-TakeProfit*point; هنا يقوم الاكسبريت بمسح القيمة السابقة ويضع قيمة جديدة وهي السعر الحالي Bid ناقص عدد النقاط SL=Bid+StopLoss*point; نفس الشئ يقوم الاكسبريت بمسح الاسناد الاول ووضع اسناد اخر وهنا تداخل في وضع الاهداف والستوب لوز [/PHP] بالمختصر نمسح هذه الكتابة ايضا ونرتب الكتابة اكثر |
رد: دورة تعليم برمجة الاكسبريت
نفس الامر بنسبة لهذه الكتابات
هي غير مرتبه وغير دقيقة [PHP] if(StopLoss==0){SL=0;}else{SL=Ask-StopLoss*point;} if(TakeProfit==0){TP=0;}else{TP=Ask+TakeProfit*poi nt;} if(StopLoss==0){SL=0;}else{SL=Bid+StopLoss*point;} if(TakeProfit==0){TP=0;}else{TP=Bid-TakeProfit*point;} OrderSend(Symbol(),OP_BUY,Lots,Ask,3*Q,SL,TP,"",Ma gicNumber,0,Blue); OrderSend(Symbol(),OP_SELL,Lots,Bid,3*Q,SL,TP,"",M agicNumber,0,Red); [/PHP] |
رد: دورة تعليم برمجة الاكسبريت
سنعيد كتابة ما سبق بترتيب اكثر
|
رد: دورة تعليم برمجة الاكسبريت
اولا نعرف المتغير الذي سنضع فيه الستوب لوز والتيك بروفيت
[PHP] double TP; double SL; [/PHP] |
رد: دورة تعليم برمجة الاكسبريت
نضع شرط ضهور السهم الازرق مع فتح صفقة واحدة فقط
ونضع حاضنة لتنفيذ الامر الذي نريده كذالك شرط ضهور السهم الاحمر وحاضنة للامر الذي نريد تنفيذه [PHP] if(orderstotal()<MaxTrades&&indigreen<4000) { } if(orderstotal()<MaxTrades&&indired<4000) { } [/PHP] مع تاكيد اننا نريد ان نقوم بعملية شراء عند ضهور سهم ازرق وبيع عند ضهور سهم احمر |
رد: دورة تعليم برمجة الاكسبريت
وكما شرحنا من قبل ان في حالة الشراء
فان الامر سيتنفذ علي Ask وهنا الربح بالنقاط يسمي TakeProfit اذن الربح الذي نريد اغلاق الصفقة لما يصله السعر هو سعر الدخول + عدد نقاط الربح ونفس الامر بالنسبة للخسارة اذا سيصبح الكود عند ضهور سهم ازرق ولاننا سندخل عملية Buy [PHP] double TP; double SL; if(orderstotal()<MaxTrades&&indigreen<4000) { if(TakeProfit==0){TP=0;}else{TP=Ask+TakeProfit*poi nt;} if(StopLoss==0){SL=0;}else{SL=Ask-StopLoss*point;} OrderSend(Symbol(),OP_BUY,Lots,Ask,3*Q,SL,TP,"",Ma gicNumber,0,Blue); } if(orderstotal()<MaxTrades&&indired<4000) { if(TakeProfit==0){TP=0;}else{TP=Bid-TakeProfit*point;} if(StopLoss==0){SL=0;}else{SL=Bid+StopLoss*point;} OrderSend(Symbol(),OP_SELL,Lots,Bid,3*Q,SL,TP,"",M agicNumber,0,Red); } [/PHP] وهذا هو الكود الكلي برتيب اكثر |
رد: دورة تعليم برمجة الاكسبريت
بارك الله فيك استاذي العزيز موفنج
|
رد: دورة تعليم برمجة الاكسبريت
استاذ موفنج والله اتعبتك معاي لو ممكن مساعدة بسيطة
حول الاكسبيرت الذي عملناه في الدورة فقد قمت ببعض التعديلات عليه مثل اضافة التريلنج استوب وكذلك اغلاق الصفقة لما تكون اشارة معاكسة لكن للاسف لم تتفعل اي من هذه الدوال في الاكسبيرت بل اصبح يفتح 5 صفقات معا بدل صفقة واحدة رغم اني حددت عدد الصفقات المفتوحة بصفقة واحدة فقط فارجو ان تشرح لي الاخطاء التي وقعت فيها لان الاكسبيرت للتعلم فقط لا اكثر وبارك الله فيك وجعله في ميزان حسناتك [PHP]extern double Lots = 0.1; double point; int digits,Q; extern int MaxTrades = 1; extern int StopLoss=0; extern int TakeProfit=0; extern int TrailingStop=0; extern int TrailingStep=0; extern int MagicNumber=1234; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { if(Digits==5||Digits==3)Q=10; else Q=1; if(Digits==2) { point=0.01; } if(Digits==4) { point=0.0001; } if(Digits==3) { point=0.01; } if(Digits==5) { point=0.0001; } } int magic=0 ; int orderstotal(){ int cnt=0; for(int i =0;i<OrdersTotal();i++){ OrderSelect(i,SELECT_BY_POS,MODE_TRADES); if(OrderSymbol()==Symbol() && MagicNumber==OrderMagicNumber()){ cnt++; } } return(cnt); } //---- //---- //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { Comment(""); if(TrailingStop>0)MoveTrailingStop(); ////////////////////////////////////////////////// double indigreen=iCustom(0,0,"imad",1,1); double indired=iCustom(0,0,"imad",0,1); ////////////////////////////////////////////////// double TP,SL; if(indigreen<4000) { if(orderstotal()<MaxTrades) {CloseSellOrders();} //Buy if(TakeProfit==0){TP=0;} else{TP=Ask+TakeProfit*point;} if(StopLoss==0){SL=0;} else{SL=Ask-StopLoss*point;} OrderSend(Symbol(),OP_BUY,Lots,Ask,3,SL,TP,"",Magi cNumber,0,Blue); } ////////////////////////////////////////////////// if(indired<4000){ if(orderstotal()<MaxTrades) {CloseBuyOrders();} //Sell if(TakeProfit==0){TP=0;} else{TP=Bid-TakeProfit*point;} if(StopLoss==0){SL=0;} else{SL=Bid+StopLoss*point;} OrderSend(Symbol(),OP_SELL,Lots,Bid,3,SL,TP,"",Mag icNumber,0,Red); } } //+------------------------------------------------------------------+ void CloseBuyOrders() { for (int cnt = 0 ; cnt < OrdersTotal() ;cnt++) { OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES); if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol()) { if (OrderType()==OP_BUY) { OrderClose(OrderTicket(),OrderLots(),Bid,3); } } } } ////////////////////////////////////////////////// void CloseSellOrders() { for (int cnt = 0 ; cnt < OrdersTotal() ; cnt++) { OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES); if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol()) if (OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots(),Ask,3); } } ////////////////////////////////////////////////// void MoveTrailingStop() { for(int cnt=0;cnt<OrdersTotal();cnt++) { OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES); if(OrderType()<=OP_SELL&&OrderSymbol()==Symbol()&& OrderMagicNumber()==MagicNumber) { if(OrderType()==OP_BUY) { if(TrailingStop>0&&NormalizeDouble(Ask-TrailingStep*point,digits)>NormalizeDouble(OrderOp enPrice()+TrailingStop*point,digits)) { if((NormalizeDouble(OrderStopLoss(),digits)<Normal izeDouble(Bid-TrailingStop*point,digits))||(OrderStopLoss()==0)) { OrderModify(OrderTicket(),OrderOpenPrice(),Normali zeDouble(Bid-TrailingStop*point,digits),OrderTakeProfit(),0,Blu e); } } } else { if(TrailingStop>0&&NormalizeDouble(Bid+TrailingSte p*point,digits)<NormalizeDouble(OrderOpenPrice()-TrailingStop*point,digits)) { if((NormalizeDouble(OrderStopLoss(),digits)>(Norma lizeDouble(Ask+TrailingStop*point,digits)))||(Orde rStopLoss()==0)) { OrderModify(OrderTicket(),OrderOpenPrice(),Normali zeDouble(Ask+TrailingStop*point,digits),OrderTakeP rofit(),0,Red); } } } } } } [/PHP] |
رد: دورة تعليم برمجة الاكسبريت
اقتباس:
لاحظ انك حذفت return من الدالة start وهي معرفة علي انها دالة من نوع int يعني ترجع رقم وغير ممكن لا ترجع شئ |
رد: دورة تعليم برمجة الاكسبريت
اقتباس:
ربما حذفتها عند عملية التعديل |
رد: دورة تعليم برمجة الاكسبريت
اقتباس:
|
رد: دورة تعليم برمجة الاكسبريت
اقتباس:
بارك الله فيك استاذ موفنج |
رد: دورة تعليم برمجة الاكسبريت
اقتباس:
فيه شئ غير صحيح في برنامجك اخي هو غلق الصفقات العكسية ماهي شروط غلق الصفقات العكسية ؟؟؟؟؟ |
رد: دورة تعليم برمجة الاكسبريت
لغلق الصفقات العكسية يشترط فقط ضهور السهم المعاكس
;غير شرط ان يكون عدد الصفقات اقل من mx trade اذت لغلق الصفقات ضع الشرط منفصل علي شرط فتح الصفقات مع تغير الشروط انا ممكن اضع لك التعديل النهائي لاكن اردت مناقشة الاخضاء لكي يستفيد الجميع عند مراجعة الموضوع |
الساعة الآن 03:55 PM |
Powered by vBulletin® Copyright ©2000 - 2025
جميع الحقوق محفوظة الى اف اكس ارابيا www.fx-arabia.com