استكمالا للرد السابق:
الخطوط الافقية تمثل الفترة المحذوفة للزواج ذات العلاقة بالعملات الاربع-
https://charts.mql5.com/15/916/eurus...of-borse-5.png
Printable View
استكمالا للرد السابق:
الخطوط الافقية تمثل الفترة المحذوفة للزواج ذات العلاقة بالعملات الاربع-
https://charts.mql5.com/15/916/eurus...of-borse-5.png
نستطيع ان نقول انه تم الانتهاء من 90%
50 دالة+ الدالة المفتاح "دالة شروط الاستراتيجية"
http://www8.0zz0.com/2017/08/18/04/645642853.png
ملخص الردود السابقة اخر اسبوعين: تبقى
1) ملاءمة الهامش الحر لحقيقة الوسيط
2) التحيز في فترة الانترمنت-الوقت الممنوع-هل تمنع التداول بشكل تام ام تسمح به لاتجاه معين فقط.
---------
ملائمة الهامش الحر: الخوارزم
1) هل يوجد هامش موجب
2) اذا لم يوجد وهناك صفقة بيع واللوتات الموجودة على الزوج صافي شراء--هل الوسيط يسمح بالتهديج ام لا--اذاا يسمح حتى في وجود هامش حر سالب سينفذ الصفقة وفق معادلات رياضية دقيقة
من لديه فكرة خارج المألوف؟؟
تصور التالي:
لديك 3 لوووبات وهي:
لوووب الأزواج
لوووب الصفقات
لوووب عدد الايام؟
وضع في الاعتبار ان لوب الصفقات يوجد فيه يوم شمعة الدخول ويوم شمعة الخروج؟
هل يمكن بطريقة مبتكرة معينة اختصارها الى لوبين فقط! وبطريقة اذكى الى لوب واحد!!
مثلا انا وصلت لليوم 49 وامس كان يوم 50 -- واريد ان اعرف صافي لوتات اليورو كندي مثلا لان عليه هذا اليوم رقم 49 صفقة جديدة!
تصور انت 3 لوبات داخل بعض!! عملية نعلم انها تعطيك نتائج دقيقة ولكن ثقيلة على البرنامج!
تصور 28 زوج داخل 200 يوم ل 100 صفقة!
وبالتالي دوران 560 الف مرة تقريبا!
من البداية في دالة شروط الدخول--من الأول يعني- لو احتفظنا باندكس زوج الصفقة!! يوفر علينا بعد ذلك الكثير!
مثلا اول زوج الملكي اندكس 0 --- وهكذا لبقية الازواج حسب عرضه في عمود الازواج ال 28 انتهاء بالفرنك ين باندكس 27
هذا قد يجعلنا نستغني لاحقا اثناء حساب المارجن عن لوووب الأزواج, طالما اندكس زوج الصفقة موجود INHERITED
مع بقاء السؤال السابق مطروحاً للمهتمين.
لو بهذه الطريقة استطعنا فعلا نتخلص من لوووب الازواج
يصبح لدينا لوبين, لوووب الايام ولوووب تسلسل الصفقات!
هل يمكن ايضا اختصارها للوووب واحد!! بسبب ان كل صفقة لها يوم خروج ويوم دخول!!
من لديه فكرة لاختصارها الى لوووب واحد بدلا من لووووبين:
كود PHP:void DETAIL_HISTORY()
{//void HISTORY_DETAIL()
for(int i=FROM_CANDLE+2;i>=TO_CANDLE;i--)
{//for(int i=NoOfCandles+2;i>=0;i--)
OO=i;
X_HISTORY_INIT();
double L;
double XXXDDD;
//1111111111111111111111111111111111111111111111111111111111 && XPair_OC[j]=="C"111111111111111111111111
for(int j=0;j<=YY;j++)
{
double MULTIPLIER=MathPow(10,MarketInfo(XPair_Order_Symbol[j],MODE_DIGITS)-Put_1_or_0);
double pip;
double pipDD;
//1111111111111111111111111111111111111111111111111111111111 && XPair_OC[j]=="C"111111111111111111111111
if(FALSE)
{
//FALSE STATEMENT
}
//1111111111111111111111111111111111111111111111111111111111 && XPair_OC[j]=="C"111111111111111111111111
else if(i>XPair_Entry_Candle[j])
{
//ignore
}
//1111111111111111111111111111111111111111111111111111111111 && XPair_OC[j]=="C"111111111111111111111111
else if(XPair_Exitt_Candle[j]>i)
{
//exit before
XClosed_Orders[i]++;
if(ACC_LOT=="ON_LOT")
{
L=NormalizeDouble(XPair_Order_Lot[j],2);
ZPair_Order_Lot[j]=NormalizeDouble(L,2);
}
if(ACC_LOT=="ACC_LOT")
{
L=NormalizeDouble(XPair_Order_Lot[j]*DL[XPair_Entry_Candle[j]],2);
if(L>=MarketInfo(XPair_Order_Symbol[j],MODE_MINLOT)) ZPair_Order_Lot[j]=NormalizeDouble(L,2);
else ZPair_Order_Lot[j]=0.00;
}
if(StringSubstr(XPair_Order_Type[j],0,1)=="B")
{
pip=MULTIPLIER*(XPair_Exitt_Price[j]-XPair_Entry_Price[j]);
}
if(StringSubstr(XPair_Order_Type[j],0,1)=="S")
{
pip=MULTIPLIER*(XPair_Entry_Price[j]-XPair_Exitt_Price[j]);
}
XClosed_Pips_ACC[i] = XClosed_Pips_ACC[i] + pip;
}
//1111111111111111111111111111111111111111111111111111111111 && XPair_OC[j]=="C"111111111111111111111111
else if(XPair_Exitt_Candle[j]==i && i!=0)
{
//exit before
XClosed_Orders[i]++;
XClosed_Orders_This_Day[i]++;
if(ACC_LOT=="ON_LOT")
{
L=NormalizeDouble(XPair_Order_Lot[j],2);
ZPair_Order_Lot[j]=NormalizeDouble(L,2);
}
if(ACC_LOT=="ACC_LOT")
{
L=NormalizeDouble(XPair_Order_Lot[j]*DL[XPair_Entry_Candle[j]],2);
if(L>=MarketInfo(XPair_Order_Symbol[j],MODE_MINLOT)) ZPair_Order_Lot[j]=NormalizeDouble(L,2);
else ZPair_Order_Lot[j]=0.00;
}
XXXDDD = Get_XXXDDD(XPair_Order_Symbol[j], i);
double YYYDDD = Get_YYYDDD(XPair_Order_Symbol[j], XPair_Entry_Candle[j]);
double C = Get_Terminal_Constant(XPair_Order_Symbol[j]);
if(StringSubstr(XPair_Order_Type[j],0,1)=="B")
{
pip = MULTIPLIER*(XPair_Exitt_Price[j]-XPair_Entry_Price[j]);
pipDD = MULTIPLIER*(iLow( XPair_Order_Symbol[j],0,i)-XPair_Entry_Price[j]);
}
if(StringSubstr(XPair_Order_Type[j],0,1)=="S")
{
pip = MULTIPLIER*(XPair_Entry_Price[j]-XPair_Exitt_Price[j]);
pipDD = MULTIPLIER*(XPair_Entry_Price[j]-iHigh( XPair_Order_Symbol[j],0,i));
}
XClosed_Pips_ACC[i] = XClosed_Pips_ACC[i] + pip;
XClosed_Pips_This_Day[i] = XClosed_Pips_This_Day[i] + pip;
XPips_Worst_This_Day[i] = XPips_Worst_This_Day[i] + pipDD;
XProfit_CLOSED_in_USD[i] = XProfit_CLOSED_in_USD[i] + 10*ZPair_Order_Lot[j]*XXXDDD*pip;
XACC_ProfitLoss_in_USD[i] = XACC_ProfitLoss_in_USD[i] + 10*ZPair_Order_Lot[j]*XXXDDD*pip;
///// MARGIN ////////////////////////////////
CHECK_ORDER_SYMBOL_PREVIOUS_LOTS(XPair_Order_Symbol[j],j,i);
XUSD_Worst_This_Day[i] = XUSD_Worst_This_Day[i] + 10*ZPair_Order_Lot[j]*XXXDDD*pipDD;
XEquity_Worst_This_Day[i]=XBalance[i+1]+XUSD_Worst_This_Day[i];
XThisDayMaxMargin[i]=XThisDayMaxMargin[i]+C*ZPair_Order_Lot[j]*YYYDDD;
XThisDayMinFreeMargin[i]=XEquity_Worst_This_Day[i]-XThisDayMaxMargin[i];
}
//1111111111111111111111111111111111111111111111111111111111 && XPair_OC[j]=="C"111111111111111111111111
else if(i==0 && XPair_Entry_Candle[j]==0)
{
//new entry now
XOpen_Orders[i]++;
XOpen_Orders_This_Day[i]++;
if(ACC_LOT=="ON_LOT")
{
L=NormalizeDouble(XPair_Order_Lot[j],2);
ZPair_Order_Lot[j]=NormalizeDouble(L,2);
}
if(ACC_LOT=="ACC_LOT")
{
L=NormalizeDouble(XPair_Order_Lot[j]*DL[XPair_Entry_Candle[j]],2);
if(L>=MarketInfo(XPair_Order_Symbol[j],MODE_MINLOT)) ZPair_Order_Lot[j]=NormalizeDouble(L,2);
else ZPair_Order_Lot[j]=0.00;
}
XXXDDD = Get_XXXDDD(XPair_Order_Symbol[j],0);
YYYDDD = Get_YYYDDD(XPair_Order_Symbol[j], 0);
C = Get_Terminal_Constant(XPair_Order_Symbol[j]);
if(StringSubstr(XPair_Order_Type[j],0,1)=="B")
{
pip =MULTIPLIER*(iClose( XPair_Order_Symbol[j],0,0)-XPair_Entry_Price[j]);
pipDD =MULTIPLIER*(iLow( XPair_Order_Symbol[j],0,0)-XPair_Entry_Price[j]);
}
if(StringSubstr(XPair_Order_Type[j],0,1)=="S")
{
pip =MULTIPLIER*(XPair_Entry_Price[j]-iClose( XPair_Order_Symbol[j],0,0));
pipDD =MULTIPLIER*(XPair_Entry_Price[j]-iHigh( XPair_Order_Symbol[j],0,0));
}
XOpen_Pips_This_Day[i] = XOpen_Pips_This_Day[i] + pip;
XPips_Worst_This_Day[i] = XPips_Worst_This_Day[i] + pipDD;
XACC_ProfitLoss_in_USD[i] = XACC_ProfitLoss_in_USD[i] + 10*ZPair_Order_Lot[j]*XXXDDD*pip;
///// MARGIN ////////////////////////////////
XUSD_Worst_This_Day[i] = XUSD_Worst_This_Day[i] + 10*ZPair_Order_Lot[j]*XXXDDD*pipDD;
XEquity_Worst_This_Day[i]=XBalance[i+1]+XUSD_Worst_This_Day[i];
XThisDayMaxMargin[i]=XThisDayMaxMargin[i]+C*ZPair_Order_Lot[j]*YYYDDD;
XThisDayMinFreeMargin[i]=XEquity_Worst_This_Day[i]-XThisDayMaxMargin[i];
}
//1111111111111111111111111111111111111111111111111111111111 && XPair_OC[j]=="C"111111111111111111111111
else if(i==0 && XPair_Entry_Candle[j]!=0 && XPair_Exitt_Candle[j]==0)
{//old entry //now C0
XOpen_Orders[i]++;
if(ACC_LOT=="ON_LOT")
{
L=NormalizeDouble(XPair_Order_Lot[j],2);
ZPair_Order_Lot[j]=NormalizeDouble(L,2);
}
if(ACC_LOT=="ACC_LOT")
{
L=NormalizeDouble(XPair_Order_Lot[j]*DL[XPair_Entry_Candle[j]],2);
if(L>=MarketInfo(XPair_Order_Symbol[j],MODE_MINLOT)) ZPair_Order_Lot[j]=NormalizeDouble(L,2);
else ZPair_Order_Lot[j]=0.00;
}
XXXDDD = Get_XXXDDD(XPair_Order_Symbol[j],0);
YYYDDD = Get_YYYDDD(XPair_Order_Symbol[j], XPair_Entry_Candle[j]);
C = Get_Terminal_Constant(XPair_Order_Symbol[j]);
if(StringSubstr(XPair_Order_Type[j],0,1)=="B")
{
pip =MULTIPLIER*(iClose( XPair_Order_Symbol[j],0,0)-XPair_Entry_Price[j]);
pipDD =MULTIPLIER*(iLow( XPair_Order_Symbol[j],0,0)-XPair_Entry_Price[j]);
}
if(StringSubstr(XPair_Order_Type[j],0,1)=="S")
{
pip =MULTIPLIER*(XPair_Entry_Price[j]-iClose( XPair_Order_Symbol[j],0,0));
pipDD =MULTIPLIER*(XPair_Entry_Price[j]-iHigh( XPair_Order_Symbol[j],0,0));
}
XOpen_Pips_This_Day[i] = XOpen_Pips_This_Day[i] + pip;
XPips_Worst_This_Day[i] = XPips_Worst_This_Day[i] + pipDD;
XACC_ProfitLoss_in_USD[i] = XACC_ProfitLoss_in_USD[i] + 10*ZPair_Order_Lot[j]*XXXDDD*pip;
///// MARGIN ////////////////////////////////
XUSD_Worst_This_Day[i] = XUSD_Worst_This_Day[i] + 10*ZPair_Order_Lot[j]*XXXDDD*pipDD;
XEquity_Worst_This_Day[i]=XBalance[i+1]+XUSD_Worst_This_Day[i];
XThisDayMaxMargin[i]=XThisDayMaxMargin[i]+C*ZPair_Order_Lot[j]*YYYDDD;
XThisDayMinFreeMargin[i]=XEquity_Worst_This_Day[i]-XThisDayMaxMargin[i];
}
//1111111111111111111111111111111111111111111111111111111111 && XPair_OC[j]=="C"111111111111111111111111
else if(i==XPair_Entry_Candle[j])
{
//new entry now
XOpen_Orders[i]++;
XOpen_Orders_This_Day[i]++;
if(ACC_LOT=="ON_LOT")
{
L=NormalizeDouble(XPair_Order_Lot[j],2);
ZPair_Order_Lot[j]=NormalizeDouble(L,2);
}
if(ACC_LOT=="ACC_LOT")
{
L=NormalizeDouble(XPair_Order_Lot[j]*DL[XPair_Entry_Candle[j]],2);
if(L>=MarketInfo(XPair_Order_Symbol[j],MODE_MINLOT)) ZPair_Order_Lot[j]=NormalizeDouble(L,2);
else ZPair_Order_Lot[j]=0.00;
}
XXXDDD = Get_XXXDDD(XPair_Order_Symbol[j],i);
YYYDDD = Get_YYYDDD(XPair_Order_Symbol[j], i);
C = Get_Terminal_Constant(XPair_Order_Symbol[j]);
if(StringSubstr(XPair_Order_Type[j],0,1)=="B")
{
pip = MULTIPLIER*(iClose( XPair_Order_Symbol[j],0,i)-XPair_Entry_Price[j]);
pipDD = MULTIPLIER*(iLow( XPair_Order_Symbol[j],0,i)-XPair_Entry_Price[j]);
}
if(StringSubstr(XPair_Order_Type[j],0,1)=="S")
{
pip = MULTIPLIER*(XPair_Entry_Price[j]-iClose( XPair_Order_Symbol[j],0,i));
pipDD = MULTIPLIER*(XPair_Entry_Price[j]-iHigh( XPair_Order_Symbol[j],0,i));
}
XOpen_Pips_This_Day[i] = XOpen_Pips_This_Day[i] + pip;
XPips_Worst_This_Day[i]= XPips_Worst_This_Day[i] + pipDD;
XACC_ProfitLoss_in_USD[i] = XACC_ProfitLoss_in_USD[i] + 10*ZPair_Order_Lot[j]*XXXDDD*pip;
///// MARGIN ////////////////////////////////
XUSD_Worst_This_Day[i] = XUSD_Worst_This_Day[i] + 10*ZPair_Order_Lot[j]*XXXDDD*pipDD;
XEquity_Worst_This_Day[i]=XBalance[i+1]+XUSD_Worst_This_Day[i];
XThisDayMaxMargin[i]=XThisDayMaxMargin[i]+C*ZPair_Order_Lot[j]*YYYDDD;
XThisDayMinFreeMargin[i]=XEquity_Worst_This_Day[i]-XThisDayMaxMargin[i];
}
//1111111111111111111111111111111111111111111111111111111111 && XPair_OC[j]=="C"111111111111111111111111
else if(i<XPair_Entry_Candle[j] && i>XPair_Exitt_Candle[j])
{
//still open//open before
XOpen_Orders[i]++;
if(ACC_LOT=="ON_LOT")
{
L=NormalizeDouble(XPair_Order_Lot[j],2);
ZPair_Order_Lot[j]=NormalizeDouble(L,2);
}
if(ACC_LOT=="ACC_LOT")
{
L=NormalizeDouble(XPair_Order_Lot[j]*DL[XPair_Entry_Candle[j]],2);
if(L>=MarketInfo(XPair_Order_Symbol[j],MODE_MINLOT)) ZPair_Order_Lot[j]=NormalizeDouble(L,2);
else ZPair_Order_Lot[j]=0.00;
}
XXXDDD = Get_XXXDDD(XPair_Order_Symbol[j], i);
YYYDDD = Get_YYYDDD(XPair_Order_Symbol[j], XPair_Entry_Candle[j]);
C = Get_Terminal_Constant(XPair_Order_Symbol[j]);
if(StringSubstr(XPair_Order_Type[j],0,1)=="B")
{
pip =MULTIPLIER*(iClose( XPair_Order_Symbol[j],0,i)-XPair_Entry_Price[j]);
pipDD =MULTIPLIER*(iLow( XPair_Order_Symbol[j],0,i)-XPair_Entry_Price[j]);
}
if(StringSubstr(XPair_Order_Type[j],0,1)=="S")
{
pip =MULTIPLIER*(XPair_Entry_Price[j]-iClose( XPair_Order_Symbol[j],0,i));
pipDD =MULTIPLIER*(XPair_Entry_Price[j]-iHigh( XPair_Order_Symbol[j],0,i));
}
XOpen_Pips_This_Day[i] = XOpen_Pips_This_Day[i] + pip;
XPips_Worst_This_Day[i] = XPips_Worst_This_Day[i] + pipDD;
XACC_ProfitLoss_in_USD[i] = XACC_ProfitLoss_in_USD[i] + 10*ZPair_Order_Lot[j]*XXXDDD*pip;
///// MARGIN ////////////////////////////////
XUSD_Worst_This_Day[i] = XUSD_Worst_This_Day[i] + 10*ZPair_Order_Lot[j]*XXXDDD*pipDD;
XEquity_Worst_This_Day[i]=XBalance[i+1]+XUSD_Worst_This_Day[i];
XThisDayMaxMargin[i]=XThisDayMaxMargin[i]+C*ZPair_Order_Lot[j]*YYYDDD;
XThisDayMinFreeMargin[i]=XEquity_Worst_This_Day[i]-XThisDayMaxMargin[i];
}
//1111111111111111111111111111111111111111111111111111111111 && XPair_OC[j]=="C"111111111111111111111111
}
//1111111111111111111111111111111111111111111111111111111111 && XPair_OC[j]=="C"111111111111111111111111
XBalance[i]=XBalance[i+1]+XProfit_CLOSED_in_USD[i];
XEquity[i]=XBalance[i+1]+XACC_ProfitLoss_in_USD[i];
XUSD_ProfitLoss_This_Day[i]=XEquity[i]-XEquity[i+1];
///// ACUMMULATIVE
XAll_Pips[i]=XClosed_Pips_ACC[i]+XOpen_Pips_This_Day[i];
XPips_Drawdown_or_Runup[i]=XAll_Pips[i]-XAll_Pips[i+1];
///// ACUMMULATIVE Drawdown
XUSD_Drawdown_or_Runup[i]=100*(XEquity[i]-Balance)/Balance;
XUSD_Drawdown_Worst[i]=100*(XEquity_Worst_This_Day[i]-Balance)/Balance;
///// DAILY Drawdown
XUSD_Daily_Drawdown_or_Runup[i]=100*(XEquity[i]-XEquity[i+1])/(XEquity[i+1]);
XUSD_Daily_Drawdown_Worst[i]=100*(XEquity_Worst_This_Day[i]-XEquity[i+1])/(XEquity[i+1]);
DL[i]=XEquity[i]/Balance;
}
//double XPairAccMarginBuyx[28][10000];
//double XPairAccMarginSell[28][10000];
Math_DrawDown_Critical();
//Margin_Correction();
//1111111111111111111111111111111111111111111111111111111111 && XPair_OC[j]=="C"111111111111111111111111
}
تحيرت!!
القواسم المشتركة بين اللووووبات كيف نستغلها ليكون هناك لووووب واحد فقط!
560 الف مرة في المثال السابق كيف نجلعها اقل من 10000 مرة!! مع الحفاظ على دقة النتائج كما هي وبالسنت!
من 3 ايام مدقر عند ذا السطرين!
http://www11.0zz0.com/2017/08/20/15/339029307.png
نعيد الكود السابق يعطي نتائج دقيقة جدا وبالسنت ولكنه ثقيل,
نريد نفس النتائج بشكل أسرع
http://www11.0zz0.com/2017/08/20/17/413090611.png
الدالة الاضافية في الكود السابق:
يأخذ رقم شمعة الاغلاق-ثم يراكمها للايام اللاحقة,
http://www13.0zz0.com/2017/08/20/17/819529184.png
تم تدقيق النتائج--دقيقة 100%
ولاتنسى ماتحدثنا عنه يوم امس لنتخلص من اللوووب الثالث من خلال الاحتفاظ باندكس زوج الصفقة---كل صفقة لها اندكس يقابل زوج الصفقة الذي تم دخولها
حتى الان لم نصل لمرحلة اثر الهامش الحر او ضرب المارجن كوول لنتأكد من جدوى هذا الأمر,
لاتنسى ال 10% المتبقية من هذا المشروع--8% منها حول المارجن--- و 2% خيار التحيز عند منع التداول على عملات محددة
http://www10.0zz0.com/2017/08/20/17/519621186.png
فالبرنامج بشكل اوتوماتك يفترض يفهم هل الوسيط يغلق كل الصفقات عند الوصول للتسوب اوت لفل ام يغلق الصفقة الاكثر خسارة الخ
ولاتنسى ان الباكتستر الفوري مصمم بحيث يناسب حتى اختبار منصات ساكسو بانك او منصات الننغا الخ التي ليس لديها ميتا تريدر,
وبإمكانك اختبار منصات fxdd على منصة هاةوس اوف بورص او العكس
افترض الشموع ناقصة مع هاوس اوف بورص
fxdd كاملة الشموع مثلا---حسنا اختبر هاوس اوف بورص على منصة fxdd أو العكس الامر سيان. وهذا أحد الأفكار القوية التي نقدمها.
في الكود قبل ردين
حسبنا فقط:
1) عدد الصفقات التي فتحت في هذا اليوم i تحديدا
2) عدد الصفقات المفتوحة الكلي في هذا اليوم i-تراكم
1) عدد الصفقات التي اغلقت في هذا اليوم i تحديدا
4) عدد الصفقات المغلقة حتى ذلك اليوم i -- تراكم
دائما ضع في ذهنك أمرين اثناء اعادة شرح سيرة الحساب
i لرقم اليوم
j لرقم الصفقة