النتائج 1 إلى 6 من 6
الموضوع: سؤال برمجي
- 11-07-2018, 02:27 PM #1
سؤال برمجي
بعد فتح الاكسبرت لعدة صفقات مثلا 4
يضع الاكسبرت ايضا امر معلق بشكل تلقائي
السؤال هو :
اريد من الاكسبرت بعد مرور نصف ساعة على وضع الامر المعلق حذفه واعادة وضع امر معلق اخر؟
فما هو الcode لهذه الوظيفة ؟؟؟( اي كل نصف ساعة يحذف الامر المعلق فقط )
مع الشكر
- 11-07-2018, 04:15 PM #2
استعملت هذا الcode بعد عدة محاولات ظبط
static datetime _lastBarTime = 0;
extern int Period1 = PERIOD_H1;
int OnInit()
{
_lastBarTime = iTime(Symbol(),Period1,0);
return(INIT_SUCCEEDED);
}
bool NewBar()
{
if (iTime(Symbol(),Period1,0) != _lastBarTime)
{
_lastBarTime = iTime(Symbol(), Period1,0);
return (true);
}
else
return (false);
}
int start()
{
if(NewBar()==true)
{
closePendingOrder();
}}
void closePendingOrder()
{
for(int a=0;a<OrdersTotal();a++)
{
if(OrderSelect(a,SELECT_BY_POS)==true)
{
if(OrderType()==OP_SELLSTOP || OrderType()==OP_BUYSTOP)
{
OrderDelete(OrderTicket(),Violet);
}
}
}
}
- 11-07-2018, 05:54 PM #3
الكود صحيح
يمكنك أيضا عمل دالة لحذف الأمر المعلق بعد توقيت معين من وضعه
مثال
كود PHP:void DeletePendingOrder(int timeMinutes)
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()>OP_SELL)
{
if(TimeCurrent()-OrderOpenTime()>=timeMinutes*60)
{
bool del=OrderDelete(OrderTicket());
}
}
}
}
- 12-07-2018, 01:28 AM #4
شكرا دكتور اسامة
وان سمحت لي اود ان اسال عن امر اخر حاولت جاهدا ان اجد له كود فلم افلح.
المشكلة: اريد ان افتح عددة صفقات هيدج او مضاعفات مع تحديد الهدف لكل صفقة هنا يبدأ الbalance بالتزايد اما equity فترتفع وتنخفض قيمتها تبعا لحجم اللوتات المفتوحة.
المطلوب تحديد تحديد قيمة ثابت K يساوي قيمة الequity عند بداية السلسة.
(0 == (if (TotalOrder(-1
{k==equity}
وتبقى الk ثابتة بحيث يحفظ قيمتها الاكسبرت رغم تغير ال equity اثناء فتح الاوامر الاخرى
وتقفل جميع الصفقات المفتوحة عندما تصبح ال equity>k.
ملاحظة: ال k ليس لها اي علاقة بال Balance لانه متغير بسبب اقفال بعض الصفقات على البروفيت فنهمله ونعتمد فقت على الequity الاساسية التي انطلقنا منها عند بداية السلسلة .
مع الشكر الجزيل .
- 12-07-2018, 01:53 AM #5
مثال على ذلك وقت حاولت وضع الbalance وال equity على الشارت لتقريب المسألة
في الصورة الاولى انطلقنا من equity تساوي 10000 وbalance يساوي 10000
بدأ التغير في الصورة الثانية فزادت قيمة الbalance , وقلت قيمة الequity
في الصورة الثالثة المطلوب وهو اقفال الصفقات بعد ان زادت الequity عن الequity الاساسية والتي كانت فيمتها 10000 وعبرنا عنها بالثابت k
وفي الصورة الرابعة اصبح الثابت k هو 10107 والمطلوب اقفال الصفقات عندما اصبحت ال10708equity اكبر من الثابت k
- 12-07-2018, 04:56 AM #6
اعتقد ان هذا الكود جيد ويحقق المطلوب مع بعض التعديلات
int start()
{
static int MostRecentPeriodStartTime = 0;
static double BalanceAtPeriodStart = 0;
int Now = TimeCurrent();
if (MathFloor(MostRecentPeriodStartTime / 86400) < MathFloor(Now / 86400)) {
BalanceAtPeriodStart = AccountBalance();
if (MostRecentPeriodStartTime == 0) {
} else {
}
MostRecentPeriodStartTime = Now;
}
if (AccountEquity() >= BalanceAtPeriodStart * 1.02) {
// Close trades at profit etc etc etc
}
}