كيف :) وقد بينا لك بالحجج والصور انه ممكن
Printable View
هيكل برنامج لكل الفريمات لكل الازواج
تعليمي
للتبسيط:
كل الازواج نعني بها الازواج التي فرضتها انت من قلب البرنامج
نعرف مصفوفة أزواج باسم pairs
سنفترض كل الازواج الازواج الخمسة التالية:
chfjpy
gbpchf
euraud
gbpusd
audcad
-
نجعل المصفوفة مقاس 5 --- خمسة ازواج
اسم المصفوفة pairs
صورة الجزء 1 من الكود:
الملف المرفق 540323
الصورة أعلاه هي نفسها الكود أسفل:
كود:
int OnInit()
{
EventSetTimer(1);
return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason)
{
EventKillTimer();
}
void OnTimer()
{
////////////////////////STEP 01//////////////
string pairs[5];
pairs[0]="CHFJPY"
pairs[1]="GBPCHF"
pairs[2]="EURAUD"
pairs[3]="GBPUSD"
pairs[4]="AUDCAD"
}
الجزء الاول: تحديد الازواج -- الرد السابق وهو من نوع string
=
=
=
الجزء الثاني تحديد الفريمات -- سنعتمد كل الفريمات التسعة الشهيرة
اذن نحتاج مصفوفة فريمات مقاس 9
سنختار اسم المصفوفة frame
بالعودة للمانوال سنعلم ان النوع ENUM_TIMEFRAMES
الملف المرفق 540324
كود الفريمات-فقط تعريف مصفوفة متغيرة وازجائها 9 قيم--القيم الشهيرة للفريمات التسعة الشهيرة
صورة ياا مشرف:
الملف المرفق 540330
الملف المرفق 540325
كود:////////////////////////STEP 02//////////////
ENUM_TIMEFRAMES FRAME[9];
FRAME[0]=PERIOD_M1;
FRAME[1]=PERIOD_M5;
FRAME[2]=PERIOD_M15;
FRAME[3]=PERIOD_M30;
FRAME[4]=PERIOD_H1;
FRAME[5]=PERIOD_H4;
FRAME[6]=PERIOD_D1;
FRAME[7]=PERIOD_W1;
FRAME[8]=PERIOD_MN1;
3) كابح تكرار الأوامر
4) اللوبات --لوب داخل لوب--لوب الازواج داخل لوب الفريمات او لوب الفريمات داخل لوب الازواج
5) الفكرة الفنية للدخول -داخل الكابح
6) الفكرة الفنية للخروج--خارج أو داخل الكابح الأمر سيان--سنجعلها داخل طلبا لخفة البرنامج
يعني مايكون ثقيل لأن الخارج كل تكة او كل ثانية يصير فيه بروسس!!
3) الكابح:
يجب ان يحيط الكابح بكل دالة ONTIMER -- يعني كل الاسطر البرمجية الفعالة تكون بين قوسي الكابح
وقيمه الاولية لابد تعرف في دالة Oninit
ايضا التعريفات السابقة للازواج والفريمات مكانها الطبيعي دالة OnInit
سيتم تعريف متغير باسم time ومقاسه 9 ونوعه طبعا datetime وازجاء القيمة الابتدائية 0 لكل العناصر التسعة.
اذا نقلنا pairs و frame لدالة onInit اذن لابد تتعرف خارج البرنامج -
صورة:
الملف المرفق 540326
فكرة الكابح: لكل فريم خذ فقط اول تكة او اول ثانية مع نشوء شمعة جديدة لكل فريم
مثلا فريم الساعة كل 60 دقيقة سيدخل البرنامج اللوب مرة واحدة فقط في اول ثانية من تلك الساعة لكل الزواج
وهكذا لبقية الفريمات
الكابح برمجيا عبارة عن دالة شرطية تقارن وقت بدء الشمعة الحالية بوقت بدء الشمعة القادمة
سيشعر البرنامج ان هناك شمعة جديدة اذا تغير وقت بدء الشمعة
ركز على كلمة بدء
هكذا يصمم ال suppresor او الكابح وميزته يكبح تكرار الاوامر
تخيل تدخل على اساس rsi تجاوز 70 على فريم الدقيقة---الدقيقة 60 ثانية ان سيضع 60 امر---امر كل ثانية!! مع الكابح فقط امر واحد مع بدء الشمعة يعني مع اول ثانية للدقيقة:
صورة:
الملف المرفق 540327
الملف المرفق 540328
كود الكابح:
كود:for(int k=0;k<ArraySize(FRAME);k++)
{
if(time[k]!=iTime(NULL,FRAME[k],0))
{
time[k]=iTime(NULL,FRAME[k],0);
}
}
قبل ان تكمل لابد ان تتأكد ان الكابح يعمل بشكل صحيح
فضل طريقة للتأكد استخدام الدالة Print داخل الكابح
نريد طباعة الفريم نصا في جورنا الاكسبيرت
لاحظ في الصورة---الوقت, كل دقيقة يطبع PERIOD_M1
وكل خمس دقائق يطبع PERIOD_M5
وكل 15 دقيقة سيطبع PERIOD_M15
وكل يوم سيطبع الساعة 00:000 PERIOD_D1---- يعني دخل اللوب مرة واحدة مع اغلاق اليوم
وهكذا
جملة الطباعة اذا تأكدت من صواب كل شيء احذفها لاحقا من الكود
مع جملة الطباعة هذه سيكون كامل الشروط للدخول والخروج مع دوالها التنفيذية لكل ازواجنا الخمسة وكل الفريمات التسعة
بعد الانتهاء من كل شيء ممكن تضيف بعض الجماليات مثل خيار الغاء بعض الفريمات مع خيار اعادة تفعيلها واشياء اخرى
for في الكود السابق هو اللوب الاول - لوب الفريمات
اللووووووب الثاني سيكون لووووب الازواج--سيفر 5 مرات من خلال for الفرارة
سيكون داخل لوووب الفريمات كوضع طبيعي
حتى الان كودنا هو:
كود:string pairs[5];
ENUM_TIMEFRAMES FRAME[9];
datetime time[9];
int OnInit()
{
EventSetTimer(1);
////////////////////////STEP 01//////////////
pairs[0]="CHFJPY";
pairs[1]="GBPCHF";
pairs[2]="EURAUD";
pairs[3]="GBPUSD";
pairs[4]="AUDCAD";
////////////////////////STEP 02//////////////
FRAME[0]=PERIOD_M1;
FRAME[1]=PERIOD_M5;
FRAME[2]=PERIOD_M15;
FRAME[3]=PERIOD_M30;
FRAME[4]=PERIOD_H1;
FRAME[5]=PERIOD_H4;
FRAME[6]=PERIOD_D1;
FRAME[7]=PERIOD_W1;
FRAME[8]=PERIOD_MN1;
return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason)
{
EventKillTimer();
}
void OnTimer()
{
for(int k=0;k<ArraySize(FRAME);k++)
{
if(time[k]!=iTime(NULL,FRAME[k],0))
{
time[k]=iTime(NULL,FRAME[k],0);
Print(EnumToString(FRAME[k]));
}
}
}
وبكذا يكون الكود جاهز 100% حسب طلبات هذا الموضوع---فقط تضيف شروطك الفنية الخ حسب فكرتك
صورة:
الملف المرفق 540332
المثال او الفكرة الفنية: مؤشر RSI
نريد من الخبير لكل أزواجنا وكل الفريمات التسعة ان يدخل امر بيع او شراء حسب تقاطعات المؤشر مع 30 او 70
اذا قطع 70 للاعلى بيع
اذا قطع 30 للاسفل شراء
او ممكن تسوي العكس--يعتمد عليك
وممكن تبسطها
اذا قطع 50 اعلى شراء واذا قطعها للاسفل بيع
او العكس--زي ماتحب
ايضا نريد من الخبير ان يطبع في خانة كومنت في المنصة: الفريم الذي تسبب في دخول الصفقة.
صورة:
الملف المرفق 540333