رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة kira-h
السلام عليكم ورحمة الله وبركاته
ويوفقنا جميعا اللهم آمين :)
أستاذي الكريم
كيف يمكن برمجة المضاعفات بغرض التعويض فقط؟
مثال
لنفترض الستوب لوس التابث 20 نقطة والهدف في أول صفقة 20 نقطة
أول صفقة بلوت 0.1 بهدف 20 نقطة عادي
المضاعفة الأولى بلوت 0.2 بهدف 10 نقطة
المضاعفة التانية بلوت 0.4 بهدف 15 نقطة
المضاعفة الثالثة بلوت 0.8 بهدف 17.5 نقطة
المضاعفة الرابعة بلوت 1.6 بهدف 18.8 نقطة
المضاعفة الخامسة بلوت 3.2 بهدف 19.4 نقطة
وهكذا ...
لأنه كلما قل الهدف (ولو جزء من النقطة) كلما زادت نسبة احتمال الربح وقلت عدد المضاعفات
أي التعويض السريع والخروج من دوامة المضاعفات بسرعة
هل يوجد مثل هذا الكود ؟!!
إذا يوجد فما هو التعديل المطلوب بكود المضاعفات العادية بطريقة برنامج Forex EA Generator 4
كود:
double CurrentLots = 1;
bool FirstLotsMgm = true;
datetime BarTime = 0;
int Count82 = 0;
int init()
{
Sleep(30000);
NDigits = Digits;
if (false) ObjectsDeleteAll(); // clear the chart
CurrentLots = Lots;
Comment(""); // clear the chart
}
كود:
{
double profit = 0;
int cnt = OrdersHistoryTotal();
for (int i=cnt-1; i >= 0; i--)
{
if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;
if ((OrderType() == OP_BUY || OrderType() == OP_SELL) && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNo)
{
profit = OrderProfit();
CurrentLots = OrderLots(); // take lots from the last order
break;
}
}
if (profit > 0) // had profit
{
CurrentLots = CurrentLots * LotsMpOnProfit + 0;
if (LotsResetOnProfit)
CurrentLots = Lots;
}
else if (profit < 0) // had loss
{
CurrentLots = CurrentLots * LotsMpOnLoss + 0;
if (LotsResetOnLoss) CurrentLots = Lots;
}
if (CurrentLots > MaxLots)
{
CurrentLots = Lots;
}
double lotvalue = CurrentLots;
if (lotvalue < MarketInfo(Symbol(), MODE_MINLOT)) // make sure lot is not smaller than allowed value
{
lotvalue = MarketInfo(Symbol(), MODE_MINLOT);
}
if (lotvalue > MarketInfo(Symbol(), MODE_MAXLOT)) // make sure lot is not greater than allowed value
{
lotvalue = MarketInfo(Symbol(), MODE_MAXLOT);
}
واعذرني على كثرة طلباتي مليش غير ربنا ثم أنت :asvc: والحمد لله
عفوا الكود السابق خاص بالمضاعفات لن يحصل له أي تغيير على ما أعتقد
أعتقد المعادلة ستكون كالتالي
(مجموع آخر الخسائر بالهيستوري) مقسوم على (لوت المضاعفة الجديدة مضروب في 100) :
هل المعادلة صحيحة؟ ولكن كيف سنربط الهدف بالمعادلة لابد من تواجده لأنه متغير خارجي !!!!
التعديل سيكون فقط في الجزء من الكود التالي
كود:
double TP = price - Takeprofit*lotvaluePipValue*Point;
if (Takeprofit == 0) TP = 0;
:Emoticon1:
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة kira-h
السلام عليكم ورحمة الله وبركاته
ويوفقنا جميعا اللهم آمين :)
أستاذي الكريم
كيف يمكن برمجة المضاعفات بغرض التعويض فقط؟
مثال
لنفترض الستوب لوس التابث 20 نقطة والهدف في أول صفقة 20 نقطة
أول صفقة بلوت 0.1 بهدف 20 نقطة عادي
المضاعفة الأولى بلوت 0.2 بهدف 10 نقطة
المضاعفة التانية بلوت 0.4 بهدف 15 نقطة
المضاعفة الثالثة بلوت 0.8 بهدف 17.5 نقطة
المضاعفة الرابعة بلوت 1.6 بهدف 18.8 نقطة
المضاعفة الخامسة بلوت 3.2 بهدف 19.4 نقطة
وهكذا ...
لأنه كلما قل الهدف (ولو جزء من النقطة) كلما زادت نسبة احتمال الربح وقلت عدد المضاعفات
أي التعويض السريع والخروج من دوامة المضاعفات بسرعة
هل يوجد مثل هذا الكود ؟!!
إذا يوجد فما هو التعديل المطلوب بكود المضاعفات العادية بطريقة برنامج Forex EA Generator 4
كود:
double CurrentLots = 1;
bool FirstLotsMgm = true;
datetime BarTime = 0;
int Count82 = 0;
int init()
{
Sleep(30000);
NDigits = Digits;
if (false) ObjectsDeleteAll(); // clear the chart
CurrentLots = Lots;
Comment(""); // clear the chart
}
كود:
{
double profit = 0;
int cnt = OrdersHistoryTotal();
for (int i=cnt-1; i >= 0; i--)
{
if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;
if ((OrderType() == OP_BUY || OrderType() == OP_SELL) && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNo)
{
profit = OrderProfit();
CurrentLots = OrderLots(); // take lots from the last order
break;
}
}
if (profit > 0) // had profit
{
CurrentLots = CurrentLots * LotsMpOnProfit + 0;
if (LotsResetOnProfit)
CurrentLots = Lots;
}
else if (profit < 0) // had loss
{
CurrentLots = CurrentLots * LotsMpOnLoss + 0;
if (LotsResetOnLoss) CurrentLots = Lots;
}
if (CurrentLots > MaxLots)
{
CurrentLots = Lots;
}
double lotvalue = CurrentLots;
if (lotvalue < MarketInfo(Symbol(), MODE_MINLOT)) // make sure lot is not smaller than allowed value
{
lotvalue = MarketInfo(Symbol(), MODE_MINLOT);
}
if (lotvalue > MarketInfo(Symbol(), MODE_MAXLOT)) // make sure lot is not greater than allowed value
{
lotvalue = MarketInfo(Symbol(), MODE_MAXLOT);
}
واعذرني على كثرة طلباتي مليش غير ربنا ثم أنت :asvc: والحمد لله
وعليكم السلام ورحمة الله وبركاته
في هذه الفكره أنت ستحتاج إلى تعديل الجزء الخاص بالهدف وليس المضاعفات لأن المضاعفات كما هي
كفكرة جيده يمكنك عمل دالة لمعرفة الخسارة من الصفقات السابقه وتحديد ربح الصفقه التاليه بحيث عندما يصبح الربح = الخساره السابقه يتم إغلاق الصفقه
مثال
كود PHP:
double LastLoss()
{
double profit;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo)
{
if(OrderProfit()<0)profit+=OrderProfit();
else return(profit);
}
}
return(profit);
}
ودالة لحساب الربح الحالي
كود PHP:
double CurrentProfit()
{
double profit;
for(int i=OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo)
{
profit=OrderProfit();
return(profit);
}
}
return(profit);
}
ثم ستكون شروط الإغلاق
كود PHP:
if(CurrentProfit()>=LastLoss())
{
// close orders
}
طبعا سوف تقوم بعمل الداله الخاصة بإغلاق الصفقات
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة MR.dollar
وعليكم السلام ورحمة الله وبركاته
في هذه الفكره أنت ستحتاج إلى تعديل الجزء الخاص بالهدف وليس المضاعفات لأن المضاعفات كما هي
كفكرة جيده يمكنك عمل دالة لمعرفة الخسارة من الصفقات السابقه وتحديد ربح الصفقه التاليه بحيث عندما يصبح الربح = الخساره السابقه يتم إغلاق الصفقه
مثال
كود PHP:
double LastLoss()
{
double profit;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo)
{
if(OrderProfit()<0)profit+=OrderProfit();
else return(profit);
}
}
return(profit);
}
ودالة لحساب الربح الحالي
كود PHP:
double CurrentProfit()
{
double profit;
for(int i=OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo)
{
profit=OrderProfit();
return(profit);
}
}
return(profit);
}
ثم ستكون شروط الإغلاق
كود PHP:
if(CurrentProfit()>=LastLoss())
{
// close orders
}
طبعا سوف تقوم بعمل الداله الخاصة بإغلاق الصفقات
بارك الله فيك أستاذي الكريم شكرا جزيلا :eh_s(7):
قمت بالتعديل ولا يوجد أخطاء عند عمل الكمبايل
قمت بالتعريف التالي
كود PHP:
void OnEveryTick()
{
if (CurrentProfit()>=LastLoss())
CheckLossProfit();
}
ثم الكود المطلوب
كود PHP:
double LastLoss()
{
double profit;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo)
{
if(OrderProfit()<0)profit+=OrderProfit();
else return(profit);
}
}
return(profit);
}
double CurrentProfit()
{
double profit;
for(int i=OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo)
{
profit=OrderProfit();
return(profit);
}
}
return(profit);
}
void CheckLossProfit()
{
if(CurrentProfit()>=LastLoss())
{
CloseOrder();
}
}
ثم دالة الاغلاق
كود PHP:
void CloseOrder()
{
int orderstotal = OrdersTotal();
int orders = 0;
int ordticket[30][2];
for (int i = 0; i < orderstotal; i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol())
{
continue;
}
ordticket[orders][0] = OrderOpenTime();
ordticket[orders][1] = OrderTicket();
orders++;
}
if (orders > 1)
{
ArrayResize(ordticket,orders);
ArraySort(ordticket);
}
for (i = 0; i < orders; i++)
{
if (OrderSelect(ordticket[i][1], SELECT_BY_TICKET) == true)
{
bool ret = OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), Slippage, MagicNo);
if (ret == false)
Print("OrderClose() error - ", ErrorDescription(GetLastError()));
}
}
}
أرجو التصحيح وجاري التجربة لايف
ولو أن الاغلاق ده أكيد هيكون معرض لإعادة التسعير إذن فخطر المضاعفات لازال قائم وكنت أتمنى أن تكون دالة تقوم بتعديل الهدف ليتم الاغلاق بدقة من سيرفر الشركة
شكرا لك :eh_s(7):
وجزاك الله كل خير ونفع بك الاسلام والمسلمين
خالص شكري وتقديري لشخصكم الكريم
1 مرفق
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة MR.dollar
أرفق الإكسبرت بعد الكود الذي قمت بكتابته وسوف أوضح لك اين الخطأ
تمام
الاكسبيرت بالمرفقات
شكرا جزيلا :)
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة ali1984
مستر دولار السلام علكيم ورحمة الله وبركاته
كيف يمكن كتابة : ادا الصفقه الماضيه OrderClose ضربت ستوب او الهذف,!
جزاك الله خيرا
يمكنك عمل دالة لمعرفة آخر صفقة هل ضربت الهدف أو الأستوب
كود PHP:
bool LastOrderClosed()
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
double tp=OrderTakeProfit();double closeprice=OrderClosePrice();double sl=OrderStopLoss();
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
if(NormalizeDouble(tp,Digits)==NormalizeDouble(closeprice,Digits))return(true);
else return(false);
}
}
return(true);
}
هذه الداله ستعطي القيمة ترو إذا أغلقت على الهدف والعكس ستعطي فولس
1 مرفق
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة MR.dollar
أرفق الإكسبرت بعد الكود الذي قمت بكتابته وسوف أوضح لك اين الخطأ
الخطأ لديك في أن الداله LastLoss ستعطي قيمة الخساره بالسالب فيجب أن تحولها إلى رقم موجب
مرفق الإكسبرت بعد التعديل
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة MR.dollar
الخطأ لديك في أن الداله LastLoss ستعطي قيمة الخساره بالسالب فيجب أن تحولها إلى رقم موجب
مرفق الإكسبرت بعد التعديل
جاري التجربة وشكر لك أستاذي الكريـــــــــــــــــــــــــــم :eh_s(7):
http://www4.0zz0.com/2013/03/27/11/970955505.gif
رد:موضوع مخصص للأسئلة البرمجية
السلام عليكم استاذى الكريم
ارجو من الله ان تكون فى اتم صحة واحسن حال
استاذى مستر دولار
سؤال برمجى صعب عليا جدا
لو فى صفقات كثيرة مفتوحة على المنصة
ممكن اعمل دالة او طريقة استطيع منه
معرفة توقيت فتح كل صفقة لوحده
يعنى مثلا
يوجد 20 صفقة على المنصة
ممكن اطلع توقيت كل صفقة ويكون عندى ال20 توقيت
تحياتى وتقديرى لشخصك الكريم
1 مرفق
رد:موضوع مخصص للأسئلة البرمجية
السلام عليكم
ممكن كود استدعاء لخطي الهاي و اللو لهدا المؤشر
بعد فشلي في استدعائه
وجزاكم الله كل الخير