النتائج 196 إلى 210 من 261
- 18-08-2010, 02:47 AM #196
رد: على بركة الله دورة إنشاء اكسبيرت يعتمد على الشبكة العصبية
أهلا بك أخي الكريم
لشقراء لك على هذه المشاركة الطيبة
اولا بالنسبة للشركات إن شاء الله سنجد حل للتلاعب معها
ثانية بالنسبة لخاصية ال-OPTIMIZATION فهي تقوم بإختبار الاكسبيرت من خلال
تغيير الإعدادات
ثم تظهر لك أحسن الإعدادات التي وجدتها
ولا أظن أن لها علاقة بالشبكة العصبية
فالاكسبيرت لا يمكنه أن يتعلم إلا بعد إنشاء الشبكة الخاصة به
والله أعلم
مرحبا بك آخي الكريم
نحن الأن يا أخي في مرحلة متقدمة عن تنقيب البرنامج
ولكن مرحبا بك في الدورة
حاول أن توضح لي مشكلتك بالصور على الخاص
وان شاء الله سنجد حلا لهذا المشكل
وحظ موفق لك و للجميع
*
- 18-08-2010, 03:20 AM #197
رد: على بركة الله دورة إنشاء اكسبيرت يعتمد على الشبكة العصبية
البارى
دوتشه
اسي ام
افكسول
اسي ام
فوركس
برو
دي دي
بوسطتن
ام بي
جميعهم جربهم ويملك حسابات حقيقه وكل حساب يتم فتحه لايقل عن 10000 بل ايداع الاول لتجربتهم ومن ثم السحب وترك 1000وبجميع الخيارات ديلنج و نوديلنج
ولا شئ نفع معهم جميعاً الاخ محارب بشده بعد اول شهر من النجاح الساحق 100% فورا يبدء ضرب الاكسبريت خصوصا نوديلنج يبدء رفع الاكسبريت بطريقه خرافيه
لان الاكسبريت من خصائصه لايدخل اذا تجاوز الاسبريد رقم معين وهذا الخيار واضح للشركة وبأمكانها متابعته ومعرفته ناهيك عن مده الصفقه لان لها مده زمنيه لان عمله على الافتتاح اليومي وليس مثل ابو الطيب على كل شمعه ساعه
ولم يتركو خير فى الاكسبريت الا وتلاعبو به له ولا تصدق اى شركة ومشاركتى السابقه لاننا غلطنا على الشركات سببت لى من المراقب العام تعديل ورساله على الخاص ؟
وكأننى كفرت بحق الشركات
وانا نصحتك لتضع بل حسبان تلاعب الشركات لانك تتكلم عن شئ خرافى لن يسلمه لك لا ابوالطيب ولا اى شخص مجانا فما بالك شركات الوساطه التى تعمل مسابقات عالميه لمعرفه والتنقيب عن هذه الاكسبريتات وشرائها ودفع مبالغ 40000 لهذه المسابقات للفائز بل مرتبه الاولى
لبتر هذه الاكسبريتات من الاسواق والانتشار لانها خربان بيوت لهم فلا تقول لى سوق مباشر او خلافه لان الاوامر تمرر عن طريق الشركات ومواضيع شرح ربحيه الشركات من فلترة العقود وفائدتها وترحيل صفقات العملاء بين البنوك موضوع كبير وشائك ولا استطيع ان انقل لك ولاكن ابحث وسف تجد كل اسرارهم
- 18-08-2010, 06:54 AM #198
رد: على بركة الله دورة إنشاء اكسبيرت يعتمد على الشبكة العصبية
يا أخي أنت قلت أكثر حساب فتحه ، ذو قيمة 10000 ولكن حسابات ال-NDD
على الأقل 20000
أما بالنسبة لمراقبة الإكسبرتات
فالشركة لا تتدخل في سكريبت الاكسبيرت
ولكن هناك ما يسمى بال MAGIC NUMBER و ال-COMMENT
من خلال هذه الخصيتين يتم مراقبة الاكسبرت
واكتشاف الاكسبيرت الناجح من الاكسبيرت الفاشل
فالشركة الوسيط ، لا تملك الوقت لمراقبة كل حساب على حدة
ولكن هناك برامج ، مهمتها إكتشاف الصفقات الناجحة
وعرقلة الحساب ( مهما كانت طبيعة المتاجرة : يدوي أو اكسبيرت)*
ولكن هناك سكربتات يتم ادراجها مع سكريبت الاكسبيرت لتغيير القيم المكتوبة داخل هذه الخاصيتين اللاتي سبق ذكرهما بعد كل صفقة
وفي كل الأحوال يجب أن نكون ايجابيين ومتوكلين على الله سبحانه وتعالى
مسخر الأسباب و الأرزاق
- 18-08-2010, 05:00 PM #199
- 18-08-2010, 05:43 PM #200
رد: على بركة الله دورة إنشاء اكسبيرت يعتمد على الشبكة العصبية
أخي العزيز khalid00708 أشكرك وهذا من دواعي سروري
أخي العزيز ahmedfeki جزاك الله خيراً في التوضيح و بالنسبة للسكربت الذي يغير الرقم السحري فهو مفيد جداً
أخي الغالي لوجه الله تعالى بخصوص أكسبرت أبو الطيب فسوف أعمل خلال هذه الأيام لإنشاء أكسبرت شبيه يعطي نفس النتائج بإذن الله تعالى ، وأعتقد والله أعلم أنه أختار مزيج بين السكربتات Heiken Ashi و SS ليس لفتح أوامر بل لتجنب أوامر في تلك الحالات.
فقد سبق وذكرت المؤشرات ليست لفتح الأوامر لإنها مبنية على أحداث سابقة لا تساوي المستقبل ونحن نعلم إن ما يحرك السوق هم الناس الذين يتأثرون بمشاعرهم والأهم هما الخوف والجشع فلا يوجد مؤشر يقيس هذه الحالات.
ولكن يمكن إستخدام المؤشرات لتجنب فتح أوامر بيع أو شراء .
مثلاً إذا كان الRSI تحت 30 فإن الإكسبيرت يوقف كل عملية بيع و يسمح عمليات الشراء والعكس وإن كان Heiken Ashi أحمر فلا يحبذ الشراء في هذه المناطق.
مع المرفق أحد هذه الإكسبرتات التي تشتري وتبيع حسب ال Heiken Ashi .
تحياتي ، أخوكم في الله أبو سام
- 22-08-2010, 07:23 AM #201
رد: على بركة الله دورة إنشاء اكسبيرت يعتمد على الشبكة العصبية
لماذا توقفتم
نحتاج المزيد من هذه المعلومات النادرة
- 22-08-2010, 09:41 PM #202
- 26-08-2010, 12:55 PM #203
- 26-08-2010, 05:42 PM #204
رد: على بركة الله دورة إنشاء اكسبيرت يعتمد على الشبكة العصبية
منتظرينك
harry up
- 27-08-2010, 08:40 AM #205
رد: على بركة الله دورة إنشاء اكسبيرت يعتمد على الشبكة العصبية
ياريت نكمل موضعنا الذى طال إنتظارة لانه فعلا موضوع شيق ....
وياريت حد يشرح لينا ازاى نغير خاصيه اومعرفه coment او magic number
- 29-08-2010, 04:22 AM #206
رد: على بركة الله دورة إنشاء اكسبيرت يعتمد على الشبكة العصبية
متابع جيد جدا
كل عام وانتم بخير
- 01-09-2010, 12:17 AM #207
رد: على بركة الله دورة إنشاء اكسبيرت يعتمد على الشبكة العصبية
متابعين معك وبقوة
امض فى طريقك وعلى بركة الله
- 01-09-2010, 12:47 PM #208
رد: على بركة الله دورة إنشاء اكسبيرت يعتمد على الشبكة العصبية
طمنونا يا اخوة الخير
هل هناك نتائج ملموسة تم التوصل لها؟؟
ام انه حدث مع هذا الاكسبيرت كما حدث مع جميع الاكسبيرتات التي تعتمد على الشبكة العصبية
(اختفت ولم تعد ابدا)
- 03-09-2010, 04:50 AM #209
رد: على بركة الله دورة إنشاء اكسبيرت يعتمد على الشبكة العصبية
إستراتيجية التجارة ... كيف نحسنها ؟
وهنا مشكلتنا المقبلة. هل نحن في حاجة الى التنبؤ الممتاز، أو هل نحن بحاجة إلى التنبؤ الذي يمكننا استخدامه للتجارة المربحة ؟ السؤال يبدو غريبا ، ولكن مجرد التفكير في ذلك للحظة واحدة. دعونا نقول لدينا تنبؤ جيد جدا لساعة بنسبة نجاح 95 ٪ .
ومع ذلك ، هل سيرتد السعر في ساعة واحدة،يرتفع ،،ينخفض ؟ هناك خوف وتردد ينتابنا . لذلك لمقارنة هذا الوضع ، التنبؤ ل10 ساعات . هل ستكون النتيجة أفضل؟
للإجابة على هذا السؤال ، نحتاج إلى التجارة الحقيقة ، ولكن مقارنة بسيطة بين أخطاء الشبكتين لن يساعد.
الجزء الثاني من مشكلتنا وهو كيف ننتج تنبؤ ممتاز . لنفترض أن لدينا شبكة عصبية التي تنتج لنا تنبؤ بنسبة *75% دقة ، سنقرنها مع شبكة أخرى تنتج لنا تنبؤ بنسبة *100% دقة،
هذه الأخيرة هي الأفضل ، سنقسم هذا التنبؤ على 10 ساعات ،سنحصل حعل تنبؤ رديئ جدا يعادل 10% ، والمخرجات المتوقعة ستكون بعيدة عن الواقع ، ولكن ماذا لو ضربنا هذه القيام المخرجة في 10 ،سنحصل على نسبة تنبؤ 100% لكل ساعة
بإنشاء شبكة عصبية ، وتعديل نسبة معدل الخطأ المسموح به ، الشبكة الأحسن هي التي ستحقق نتائج جيدة أكثر من خلال المقارنة المعتمدة على الصفقات الناجحة
ونسبة الخسارة
*
الشبكة العصبية :بعض الملاحظات
أولا و قبل كل شيء ،في مثالنا السابق التعليم التلقائي لشبكة لن يتوقف ، لأننا لم نحد أي معيار توقف.
في الوظيفة CREATE_NN ، بإمكاننا تحديد نسبة الخطأ الادنى (عندما تقل إليها الشابة ،يتوقف التعليم )
أيضا يمكن أن نوفر أكبر عدد ممكن من تكرار عملية معالجة البيانات عند التعليم
ويمكن إستعمال المعيارين
لن نستعمل هذه المعايير في مثلانا هذا ، بل سنشهد التعليم ،وعندما نشعر أنه في مرحلة جيدة نضغط على STOP
ثانيا ، من الطرق التي تجعل الشبكة أصغر ،،أسرع و اكثر دقة ، وهو أن نبدء بشبكة صغيرة ،ثم نزيد في حجمها خلية خلية
علما أن عدد خلايا المدخلات يحدد من خلال عدد أعمدة البيانات المدخلة
و عدد خلايا المخرجات يحد من خلال عدد أعمدة بيانات المخرجات (غالبا مخرج واحد ولكن يمكن تعديل هذا الخيار )
وهذا يعني أننا يجب أن نحسن من عدد خلايا الطبقة الخفية
كذلك ، نحن لا نعلم ماهي البيانات التي سنستعملها ، هل clv-15(تأخير 15 يوم )
ستحسن من التنبؤ أو clv-256 ستكون أحسن ،أو نستعملهم الإثنان في نفس الشبكة
أو بإظفة clv-256 ستخرب الاداء ؟؟؟!
باستخدام دورات تكرارية متداخلة لإستخدام إعدادات مختلفة للمدخلات ، تمكننا :
1 - إنشاء وتجربة تركيبات مختلفة من التخلف.
2 - إنشاء وتجربة عدد مختلف من الخلايا العصبية في الطبقة الخفية.
3 -إنشاء وتجربة دمج عدة مؤشرات
...إلخ
لأنه إذا حاولت جميع التوليفات الممكنة لجميع المتغيرات والإعدادات فأنك لن تحصل على النتيجة ، بغض النظر عن مدى سرعة جهاز الكمبيوتر الخاص بك. أدناه ، سوف نستخدم عدة حيل للحد من العمليات الحسابية الى الحد الادنى.
مثلا ، إذا بدأنا من خلية واحدة في الطبقة المخفية ، ثم نزيدها خلية ،2 ،3,....إلخ
وعند بعض نقاط نسب الأخطاء (نوعية التبؤ ) أو من خلال الربح (إذا اختبرنا الشبكة العصبية بالمتاجرة من خلالها ) سنحصل على أفضل الحالات والإعدادات
ولكن للأسف لا يمكن ضمان أنه بعد أحسن أداء للشبكة ستحصل فرصة أخرى
وهذا يعني ، أن الخطأ قد يذهب مثلا من 100 ، 30 ، 20 ، 40 ، 50 (وصل إلى الحد الأدنى ، أليس كذلك؟) ومن ثم 30 ، 20 ، 10 ، 15 ،... (الحد الأدنى الثاني).
ما علينا فعله هو اختبار جميع الإعدادات والأرقام المعقولة.
ثالثا * الحل الأمثل هو سيف ذو حدين. إذا كنا سنفرط في تحسين التعليمات البرمجية ، فإنه قد لا تعمل خارج نطاق البيانات التي استخدمناها وصقلنا عليها البرنامج . وسأبذل
قصارى جهدي لتجنب هذا المأزق. إذا كنت تريد أن تفعل تحسين إضافي في تعليمات برمجية أو الشبكة العصبية ، أنصحك أن تفعل البحث في شبكة الإنترنت ، لمعرفة المزيد عن المشاكل الخفية لهذا النهج. أيضا .
سنركز على نعومة منحنى الربح. الأرباح التي تبدو 0 ، -500 ، 1000 ، -100 ، التي قد تكون كبيرة 10000 ، ولكن الأرباح 0 ، 100 ، 200 ، 300 ، 400... تبدو الأفضل ، كما هو أقل مخاطرة. قد
نتحدث عنها في وقت لاحق.
إستراتيجية التداول التي سنلعب عليها :
أولا وقبل كل شيء ، سننشئ نموذج أولي والذي بأمكنة تعديله وتحسينه في المستقبل بسهولة حتى يكون الأمثل في المستقبل. سيكون اكسبيرت ، الذي يستخدم الشبكة العصبية للتجارة ويعطي الرسم البياني (الربح وعدد الصفقات ). وسيقوم أيضا بحساب
نسبة الصفقات الخاسرة ، كمقياس لمتانة الاكسبيرت لدينا.
بإمكانكم متابعة المثال الذي سنقوم بدراسته وهو forex_nn_01.tsc يوجد في هذا المسار
\\CortexPro\\data\\samples\\forex\\eurusd_h1.txt.. ...
ولا تنسو عند تشغيل السكريبت أن تغيروا المسارات حسب مكانها في جهازكم
forex_nn_01.tsc, part 1
كود PHP:
void main()
{
OUT_CLEANUP();
// ***** Loading data
string strDataFileName =
"h:\\S_Projects\\CortexPro\\data\\samples\\forex\\eurusd_h1.txt";
double bIsPathRelative = 0;
array arrDate = CREATE_ARRAY(0);
array arrTime = CREATE_ARRAY(0);
array arrOpen = CREATE_ARRAY(0);
array arrHigh = CREATE_ARRAY(0);
array arrLow = CREATE_ARRAY(0);
array arrClose = CREATE_ARRAY(0);
TABLE_LOADER(strDataFileName, bIsPathRelative, 0, "", 0, "", 0,
arrDate, 1, arrTime, 2, arrOpen, 3, arrHigh, 4, arrLow, 5, arrClose);
double nExtractRecords = 0.8 * ARRAY_SIZE(arrClose);
double nInterval = 7;
array arrClv = CreateClv(nInterval);
array arrLags = CREATE_ARRAY(0);
arrLags[0] = 0; arrLags[1] = 1; arrLags[2] = 2;
arrLags[3] = 3; arrLags[4] = 4; arrLags[5] = 5;
arrLags[6] = 6; arrLags[7] = 7; arrLags[8] = 8;
double nMaxInterval = nInterval;
double nMaxLag = arrLags[ARRAY_SIZE(arrLags) - 1];
double nRemoveFirst = nMaxLag + nMaxInterval;
string strLagFileName =
"h:\\S_Projects\\CortexPro\\data\\samples\\forex\\eurusd_h1.lgg";
CreateLagFile(strLagFileName, arrLags, nRemoveFirst);
double dStopError = 0;
double nStopEpoch = 0;
double nNeuronsLayer2 = 7;
string strNnFileName =
"h:\\S_Projects\\CortexPro\\data\\forex_nn\\nn\\eurusd_h1.nn";
NewNn(arrLags, dStopError, nStopEpoch, nNeuronsLayer2, strNnFileName);
TeachNn();
double dStopLoss = 0.005; // 50 points
double dBuyLevel = 0.3;
double dSellLevel = 0.7;
TestNet();
string strForexName = "EURUSD_H1";
Chart(strForexName);
PRINT("%s\r\n", "Done");
}
// ------------------
ثانيا ، لدينا وظيفة TestNet. سنستخدم خوارزمية بسيطة جدا في التداول . وتقتصر على مؤشر CLV
واللتي تتراوح قيمته بين 0 -- 1 ، وذلك عندما يعبر المؤشر فوق dBuyLevel ، نشتري وعندما يعبر dSellLevel ،نبيع.
من الواضح ، أنها ليست أفضل استراتيجية التداول ، لكن سنحتاج لها لغرضنا (فقط في الوقت الحالي). إذا كنت ترغب في تحسينه ، وهنا بعض المؤشرات. أولا ، قد أن يكون لها اكسبيرت ، وهذا ليس دائما في السوق. ثانيا ، قد تحتاج إلى استخدام
أكثر من مؤشر واحد كمدخلات ، وربما ، أكثر من شبكة ، بحيث يتم اتخاذ قرار الصفقات من خلال توقع بعض المؤشرات.وسوف نضيف بعض التحسينات على هذه الخوارزمية في وقت لاحق.
سنستخدم بعض الافتراضات القياسية لتجارة الفوركس : الفارق هو 5 نقاط ، الرافعة هي 100 ،.حجم العقد الأدنى هو 100 دولار (FOREX-MINI).
دعونا نلقي نظرة على برنامجنا . ومرة أخرى ، هو مبسيط
ملاحظة هامة : سنستعمل TestNn () في أول السكريبت ، ولها إمكانية الوصول إلى جميع المتغيرات التي تم إنشاؤها وسيتم انشائها حتى إذا كنت ترى أن المتغير استخدمناه بدون تهيئة ذلك ، فإنه يعني على الارجح ان كان ذلك في تهيئة
NewNn () ، TeachNn () أو بعض الوظائف الأخرى التي سميت قبل TestNn ().
لجعل الأمور أسهل ، سيتم وضع التعليقات في التعليمات البرمجية.
forex_nn_01.tsc, part 2
كود PHP:void TestNet()
{
PRINT("%s\r\n", "Testing the NN");
// Array to hold the balance (total amount of money)
// that we have after each trade. The initial amount
// is $1000
array arrBalance = CREATE_ARRAY(0);
arrBalance[0] = 1000;
// Array to keep bar number, at which the trade happened
array arrBars = CREATE_ARRAY(0);
arrBars[0] = 0;
// We use so-called mini-forex, that is supported by
// most of brockers. A minimum lot size is $100
double dLotSize = 100; // 0.1 lot
// Opened trade. -1 buy, 1 sell, 0 - none. In this simple
// system, we can only have one opened position in a time
double nType = 0;
// The result of NN calculations
array arrNn = CREATE_ARRAY(0);
// Open the NN, apply it to the lag file (created above, in
// main() function)
double hNN = OPEN_NN(strNnFileName, bIsPathRelative);
APPLY_NN(hNN, nExtractRecords, 1.0, 1, arrClv, arrLags, 1, arrNn);
CLOSE_NN(hNN);
// We are going to keep log of all our trades. I am using
// a simple text file, that is supposed to look nice when
// opened in Windows Notepad. If you need, change number
// of tabs, spaces and so on, to make columns alined in your
// editor of a choice, or save the file with HTML decorations,
// as a table.
string strReportFileName =
"c:\\s_projects\\CortexPro\\data\\stocks_nn\\report.txt";
// A header to place in the REPORT.TXT
string str =
"Number Operation Price Closed ClosePrice Total";
double hFile = F_OPEN(strReportFileName, "wb");
F_PRINT(hFile, "%s\r\n", str);
// Initial values of constants we use
double dSpread = 0.0005;
double bStop;
double dMaxDrawDown = 0;
// Used to calculate drawdown
double dCurrentMax = arrBalance[0];
// Number of current trades, at the end, it holds the
// total number of trades
double nTradeNumber = 0;
// Price at which the trade was opened. When we close the
// trade, it is used to calculate the profit
double dOpenPrice;
// Price at which stop loss will work.
double dStop;
// for all testing data, except for the first
// few records, where the indicator is not
// defined
for(double nBar = nRemoveFirst + 1;
nBar < ARRAY_SIZE(arrClose); nBar = nBar + 1)
{
if(nType != 0) // If we have an open trade
{
// Will become 1 if stop loss have been fired
bStop = 0;
double dClosedAt; // Execution price
// If BUY and stop loss reached
if(nType == -1 && arrLow[nBar] <= dStop)
{
arrBalance[ARRAY_SIZE(arrBalance)] =
arrBalance[ARRAY_SIZE(arrBalance) - 1]
+ 100 * (arrLow [nBar] - dOpenPrice) * dLotSize;
bStop = 1;
dClosedAt = arrLow[nBar];
}
else
{
if(nType == 1 && arrHigh[nBar] >= dStop - dSpread)
{
arrBalance[ARRAY_SIZE(arrBalance)] =
arrBalance[ARRAY_SIZE(arrBalance) - 1] +
100 * (dOpenPrice - arrHigh[nBar] - dSpread)
* dLotSize;
bStop = 1;
dClosedAt = arrHigh[nBar];
}
}
// If stop loss have been fired
if(bStop == 1)
{
nType = 0;
arrBars[ARRAY_SIZE(arrBars)] = nBar;
F_PRINT(hFile, "Stop %f", dClosedAt, " %f\r\n",
arrBalance[ARRAY_SIZE(arrBalance) - 1]);
}
}
// A drawdown is calculated in relation to the price
// maximum that (so far) was reached.
double dDrawDown = (dCurrentMax -
arrBalance[ARRAY_SIZE(arrBalance) - 1]) / dCurrentMax;
dMaxDrawDown = MAX(dMaxDrawDown, dDrawDown);
dCurrentMax = MAX(dCurrentMax,
arrBalance[ARRAY_SIZE(arrBalance) - 1]);
// This code is not required, but will increase the
// speed dramatically, by ignoring "bad" trading systems
// In future, we may use dMaxDrawDown here.
if(arrBalance[ARRAY_SIZE(arrBalance) - 1] < 500)
{
break nBar;
}
// If we have met the "buy" conditions, and we are
// not in a long position yet.
if(nType != -1 &&
arrNn[nBar - 1] <= dBuyLevel &&
arrNn[nBar] >= dBuyLevel)
{
if(nType == 1) // Close short positions, if any
{
arrBalance[ARRAY_SIZE(arrBalance)] =
arrBalance[ARRAY_SIZE(arrBalance) - 1] +
100 * (dOpenPrice - arrHigh[nBar] - dSpread)
* dLotSize;
arrBars[ARRAY_SIZE(arrBars)] = nBar;
F_PRINT(hFile, "Close %f", arrHigh[nBar],
" %f\r\n", arrBalance[ARRAY_SIZE(arrBalance) - 1]);
}
// Buy long
dOpenPrice = arrHigh[nBar];
dStop = dOpenPrice - dStopLoss;
nType = -1;
nTradeNumber = nTradeNumber + 1;
F_PRINT(hFile, "%.0f ", nTradeNumber,
"Buy %f ", arrHigh[nBar]);
}
else // If we have met "sell" conditions, and we are
// not in short position yet.
{
if(nType != 1 &&
arrNn[nBar - 1] >= dSellLevel &&
arrNn[nBar] <= dSellLevel)
{
if(nType == -1) // Close long positions, if any
{
arrBalance[ARRAY_SIZE(arrBalance)] =
arrBalance[ARRAY_SIZE(arrBalance) - 1] +
100 * (arrLow[nBar] - dOpenPrice) * dLotSize;
arrBars[ARRAY_SIZE(arrBars)] = nBar;
F_PRINT(hFile, "Close %f", arrLow[nBar],
" %f\r\n",
arrBalance[ARRAY_SIZE(arrBalance) - 1]);
}
// Sell short
dOpenPrice = arrLow[nBar];
dStop = dOpenPrice + dStopLoss;
nType = 1;
nTradeNumber = nTradeNumber + 1;
F_PRINT(hFile, "%.0f ", nTradeNumber,
"Sell %f ", arrLow[nBar]);
}
}
}
// If at the end we have open positions, close them
if(nType == 1)
{
arrBalance[ARRAY_SIZE(arrBalance)] =
arrBalance[ARRAY_SIZE(arrBalance) - 1] +
100 * (dOpenPrice - arrHigh[nBar - 1]
- dSpread) * dLotSize;
arrBars[ARRAY_SIZE(arrBars)] = nBar - 1;
F_PRINT(hFile, "Close %f", arrHigh[nBar], " %f\r\n",
arrBalance[ARRAY_SIZE(arrBalance) - 1]);
}
else
{
if(nType == -1)
{
arrBalance[ARRAY_SIZE(arrBalance)] =
arrBalance[ARRAY_SIZE(arrBalance) - 1] +
100 * (arrLow[nBar - 1] - dOpenPrice) * dLotSize;
arrBars[ARRAY_SIZE(arrBars)] = nBar - 1;
F_PRINT(hFile, "Close %f", arrLow[nBar], " %f\r\n",
arrBalance[ARRAY_SIZE(arrBalance) - 1]);
}
}
F_PRINT(hFile, "Balance: %f",
arrBalance[ARRAY_SIZE(arrBalance) - 1],
", Max. Drawdown: %f", dMaxDrawDown,
", Number of trades: %.0f", nTradeNumber);
F_CLOSE(hFile);
}
لحساب نسب الخسارة ، هناك بعض الطرق ،ونحن بصدد إستعمال أحسنها
نسبة الخسارة أو السحب هي مقياس لنجاح أو فشل برنامجنا
كم لنا من فرصة لنخسر مالنا ؟
لنفترض أننا نتاجر بمبلغ قدره 1000$
اذا كان الربح 100>200>300>400>....
نسبة الخسارة هي 0
اذا كان الربح 100>200>100>....
نسبة الخسارة هي 0.1 (10%)
فقد خسرنا مبلغ يعادل 1/10 من الإيداع الأولي (من 1200 إلى 1100)
علما أن نستعمل حجم العقد يساوي dLotSize =0.1 <100$
ومن الواضح أن في التجارة على الحقيقي ، سنستفيد كثيرا إذا كان حجم العقد تم حسابه من الخلال رصيدنا :
forex_nn_01.tsc, part 3
كود PHP:dLotSize = FLOOR(arrBalance[
ARRAY_SIZE(arrBalance) - 1] / 1000) * 100;
if(dLotSize < 100)
{
dLotSize = 100;
}
وهذا يكون أسهل إن كان حجم العقد هو نفسه
في وقت لاحق في هذا الدرس ، فإننا سوف تطبق قواعد إدارة الأموال على نظام التداول لدينا ، ولكن حتى الآن لا.
في الوظيفة التالية سنقوم بإنشاء مؤشر ال-CLV ، وهو يستخدم الفترة الزمنية في إعداداته ،يعني أنا ممكن أن نستدعيه عدة مرات وبإعدادات مختلفة
forex_nn_01.tsc, part 4
كود PHP:
array CreateClv(double nInterval)
{
PRINT("%s\r\n", "Creating CLV indicator");
array arrClv = CREATE_ARRAY(0);
array arrPeriodLow = CREATE_ARRAY(0);
array arrPeriodHigh = CREATE_ARRAY(0);
double nArraySize = ARRAY_SIZE(arrClose);
array arrPeriodLow = MVMIN(arrLow, nInterval);
array arrPeriodHigh = MVMAX(arrHigh, nInterval);
for(double i = 0; i < nInterval; i = i + 1)
{
arrClv[i] = 0;
}
double dClose;
double dLow;
double dHigh;
for(i = nInterval; i < nArraySize; i = i + 1)
{
dClose = arrClose[i];
dLow = arrPeriodLow[i];
dHigh = arrPeriodHigh[i];
// / 2 + 1 to confine to 0...1 instead of -1...1
arrClv[i] = (((dClose - dLow) - (dHigh - dClose))
/ (dHigh - dLow)) / 2 + 0.5;
}
return arrClv;
}
لإنشاء ملف LAG سنستخدم الوظيفة CREATE_LAGE_FILE ،بدلا من ذلك ، يمكننا ان نفعل ذلك بشكل واضح من خلال توفير كافة التعليمات البرمجية الضرورية. في هذه الحالة ، لدينا المزيد من السيطرة ، ونحن سنحتاج الى
ذلك ، إذا بدأنا بتنويع عدد من أعمدة ال-LAG ..إلخ .
forex_nn_01.tsc, part 5
كود PHP:void CreateLagFile(string strLagFileName, array arrLags,
double nRemoveFirst)
{
PRINT("%s\r\n", "Creating lag file");
hFile = F_OPEN(strLagFileName, "wb");
F_PRINT(hFile, "%s", "No,Clv,");
for(i = 1; i < ARRAY_SIZE(arrLags); i = i + 1)
{
F_PRINT(hFile, ",Clv-%.0f", arrLags[i]);
}
F_PRINT(hFile, "%s", "\r\n");
for(i = nRemoveFirst; i < ARRAY_SIZE(arrClose); i = i + 1)
{
F_PRINT(hFile, "%.0f", i - nRemoveFirst + 1);
for(double j = 0; j < ARRAY_SIZE(arrLags); j = j + 1)
{
F_PRINT(hFile, ",%f", arrClv[i - arrLags[j]]);
}
F_PRINT(hFile, "%s", "\r\n");
}
F_CLOSE(hFile);
}
nRemoveFirst هو متغيرمهم ، عدة وظائف ومؤشرات لا تعمل بدون إستخدم البيانات الأولى
لنفترض أنه لدينا متوسط متحرك ((MA(14)
سيتمركز من خلال حسابه التسجيلات من 1 الى 14 ،لذلك فلن نأخذ هذه البيانات في الحسبان
forex_nn_01.tsc, part 6
كود PHP:void NewNn(array arrLags, double dStopError,
double nStopEpoch, double nNeuronsLayer2,
string strNnFileName)
{
PRINT("%s\r\n", "Creating NN");
double nSkipBefore = 0;
double nSkipAfter = 0;
string strStartLine = "";
string strEndLine = "";
double bReverseArrays = 0;
// Inputs
array arrInputColumns = CREATE_ARRAY(0);
array_s arrInputColumnNames = CREATE_ARRAY_S(0);
// 0 - Number, 1 - Clv, our input begins at column No 2
for(double nInputCol = 1;
nInputCol < ARRAY_SIZE(arrLags);
nInputCol = nInputCol + 1)
{
arrInputColumns[nInputCol - 1] = nInputCol + 1;
arrInputColumnNames[nInputCol - 1] =
"Clv-" + NUM2STR(arrLags[nInputCol], "%.0f");
}
array arrOutputColumns = CREATE_ARRAY(0);
arrOutputColumns[0] = 1; // Clv
array_s arrOutputColumnNames = CREATE_ARRAY_S(0);
arrOutputColumnNames[0] = "Clv";
// dStopError = 0;
// nStopEpoch = 0;
// To do: Modify if more than one indicator is used
double nNeuronsLayer1 = ARRAY_SIZE(arrLags);
// double nNeuronsLayer2 = 7;
double nNeuronsLayer3 = 1;
double nNeuronsLayer4 = 0;
double nLayers = 3;
double nActivation = 0;
double nAdjustRange = 1.0;
array arrOutTabInputColumns = CREATE_ARRAY(0);
arrOutTabInputColumns[0] = 0; // Number
array_s arrOutTabInputColumnNames = CREATE_ARRAY_S(0);
arrOutTabInputColumnNames[0] = "No";
array arrOutTabOutputColumns = CREATE_ARRAY(0);
// Desired output and NN output will be added to the
// same list, right after inputs
arrOutTabOutputColumns[0] = ARRAY_SIZE(arrLags);
arrOutTabOutputColumns[1] = ARRAY_SIZE(arrLags) + 1;
array_s arrOutTabOutputColumnNames = CREATE_ARRAY_S(0);
arrOutTabOutputColumnNames[0] = "Clv";
arrOutTabOutputColumnNames[1] = "NN: Clv" ;
CREATE_NN(strNnFileName, bIsPathRelative, strLagFileName,
bIsPathRelative, nSkipBefore, nSkipAfter, strStartLine,
strEndLine, bReverseArrays, arrInputColumns,
arrInputColumnNames, arrOutputColumns,
arrOutputColumnNames, nExtractRecords, dStopError,
nStopEpoch, nNeuronsLayer1, nNeuronsLayer2,
nNeuronsLayer3, nNeuronsLayer4, nLayers, nActivation,
nAdjustRange, arrOutTabInputColumns,
arrOutTabInputColumnNames, arrOutTabOutputColumns,
arrOutTabOutputColumnNames);
}
forex_nn_01.tsc, part 7
كود PHP:void TeachNn()
{
PRINT("%s\r\n", "Opening NN dialog, teaching the NN");
double bStartLearning = 1;
double bResumeScript = 1;
double bReset = 1;
OPEN_NN_FILE(strNnFileName, bIsPathRelative,
bStartLearning, bResumeScript, bReset);
}
forex_nn_01.tsc, part 8
كود PHP:void Chart(strForexName)
{
string strXML = "";
strXML = strXML + "<forex>\r\n";
string strPath =
"c:\\S_Projects\\CortexPro\\data\\stocks_nn\\images\\";
string strProfitPath = strPath + strForexName + ".png";
strXML = strXML + "\t<symbol>\r\n";
strXML = strXML + "\t\t<symbol>\r\n";
strXML = strXML + "\t\t\t" + strForexName +
NUM2STR(arrBalance[ARRAY_SIZE(arrBalance) - 1], ",
Profit: %f") +
NUM2STR(nTradeNumber, ", Number of trades: %.0f") +
NUM2STR(dMaxDrawDown, ", Max. Drawdown: %f\r\n");
strXML = strXML + "\t\t</symbol>\r\n";
strXML = strXML + SAVE_CHART(400, 500,
0, strProfitPath, arrBars, arrBalance);
strXML = strXML + "\t</symbol>\r\n";
strXML = strXML + "</forex>\r\n";
SAVE_XML(strPath, "chart_forex_nn", "chart_forex_nn",
"root", strXML);
SHOW_XML(strPath + "chart_forex_nn.xml");
}
- 04-09-2010, 04:17 PM #210
رد: على بركة الله دورة إنشاء اكسبيرت يعتمد على الشبكة العصبية
( بسم الله ماشاء الله )
جزاك الله خيرا
اخى الكريم أحمد باشا على هذا الموضوع العلمى الرائع
وحبك فى الله لأعضاء المنتدى بتعليمهم من علمك وخبرتك بفضل الله
وان شاء الله نهنئك بمشروع تخرجك بامتياز مع مرتبة الشرف يا دكتور أحمد
وتسجيل حضور ومتابعة فى هذه الدورة الرائعة ياباشا
عشان الموضوع ده عايز قراءة بتأنى ومحتاج بعض المعلومات الرياضية
وأخيك فى الله نسى حاجات كتيره فى الرياضيات لكبر السن ومشاغل الحياة
همسة : موضوع هذه الدورة فعلا محتاج التثبيت فى مواضيع المنتدى المثبته لأهميته الكبيره لأعضاء المنتدىآخر تعديل بواسطة MAMDOH111 ، 04-09-2010 الساعة 04:27 PM
المواضيع المتشابهه
-
๑۩۞۩๑ فكرة مجنونة للمناقشة ۞ لأننى عايز الشارت يكلمنى ههههه ๑۩۞۩๑
By MAMDOH111 in forum سوق تداول العملات الأجنبية والسلع والنفط والمعادنمشاركات: 11آخر مشاركة: 08-03-2010, 01:46 AM -
๑۩۞۩๑ ( كل عام وحضراتكم بخير بمناسبة المولد النبوى الشريف ) ๑۩۞۩๑
By MAMDOH111 in forum استراحة اعضاء المتداول العربيمشاركات: 14آخر مشاركة: 27-02-2010, 12:32 AM -
๑۩۞۩๑ ( الأقمار الصناعية تشهد بنبوة محمد صلى الله عليه وسلم ) ๑۩۞۩๑
By MAMDOH111 in forum استراحة اعضاء المتداول العربيمشاركات: 0آخر مشاركة: 25-02-2010, 06:14 PM -
๑۩۞۩๑ ترويض المجنون... هل يكفيك 100% شهريا + أدارة ماليه صارمة ๑۩۞۩๑
By LoCuS in forum توقعات وتوصيات سوق العملاتمشاركات: 744آخر مشاركة: 16-12-2008, 05:13 AM