النتائج 226 إلى 240 من 261
- 07-10-2010, 11:55 AM #226
رد: ๑۩۞۩๑( على بركة الله دورة إنشاء اكسبيرت يعتمد على الشبكة العصبية )๑۩۞۩๑
مازلت متابع لك أخى أحمد ومنتظر عودتك الكريمة
تقبل كامل أحترامى وتقديرى اخى الكريم أحمد
سلام عليكم
- 08-10-2010, 09:47 PM #227
رد: ๑۩۞۩๑( على بركة الله دورة إنشاء اكسبيرت يعتمد على الشبكة العصبية )๑۩۞۩๑
عندي استفسار عزيزي
هل اكسبيرت ابو الطيب حول ال10 آلاف الى مليار في 10 اشهر
ام إلى 1000 مليار يعني ترليون
- 08-10-2010, 10:03 PM #228
رد: ๑۩۞۩๑( على بركة الله دورة إنشاء اكسبيرت يعتمد على الشبكة العصبية )๑۩۞۩๑
لي بعض الملاحظات على اكسبيرت ابو الطيب
أولاً البروكر الباك تيست كان على بروكر سيئ جداً خصوصاً وأن الهيستوري فيها فجوات كبيرة وهو **********
وعليه العديد من المشاكل وليس مسجلاً لان الشركة كنديه والسبيرد عندهم منخفض جداً
ثانياً رأيت ان الاكسبيرت يعمل 5 أضعاف الرصيد في الأسبوع وهذا شئ عادي جداً
ثالثاً : الدرو داون لاكسبيرت ابو الطيب وصل لل41% وهذا كثير
سأضع باك تيست لأكسبيرت ولمدة 11 سنه وبدأ من 100 دولار فقط
والنتايج تتكون من 12 صفر
- 08-10-2010, 10:29 PM #229
رد: ๑۩۞۩๑( على بركة الله دورة إنشاء اكسبيرت يعتمد على الشبكة العصبية )๑۩۞۩๑
مرحبا بك آخي الكريم ، نعم حوله إلى 1000 مليار
أهل بك أخي الكريم
وهذا هو هدفنا هنا وهو لمناقشة الاكسبيرت والتعلم
كيف نصنع اكسبيرت مشابه أو أحسن لما لا
أنا كذلك لدي اكسبيرت وهو MEGADROID وبإعدادات معينة حول 200 دولار إلى 145 ألف مليار
والباك تست عندي
وقد ارفقته في هذه الدورة في مشاركات سابقة
مع بعض التفسير حول الخدع التي يستعملها بعض مرويجي هذه الاكسبيرتات
حتى لا ينجح إلا إذا اشتريته من عندهم
ليس بصفة متطورة مع تغيرات السوق
بما أن مفتاح تعليم هذه الإكسبرتات لا يروج ولا يباع
ونحن في طور إنشاء اكسبيرت يعتمد على الشبكة العصبية
حتى يكون دائما مواكب لتغيرات السوق
وساقوم بنشر الدرس القادم بعد قليل
واعتذر من الجميع عن هذا التأخير *
- 11-10-2010, 02:14 AM #230
رد: ๑۩۞۩๑( على بركة الله دورة إنشاء اكسبيرت يعتمد على الشبكة العصبية )๑۩۞۩๑
تحسين إستراتيجية الاكسبرت :
أين المشكلة ؟؟
السبب في سوء النتائج واضح تماما : استخدمنا وقف الخسارة ،الشارت ، مستويات البيع والشراء وغيرها من الإعدادات ، بطريقة عشوائية محضة -- اخترنا فقط الأولى التي جاءت في الاعتبار! ماذا لو نحاول دمجها قليلا؟
أولا ، يجب أن نعلم أن التحسين المفرط في مستويات البيع والشراء ، يمكن أن يخرب فعالية الاكسبيرت في المستقبل ، و لكن لا يزال بإمكاننا القيام ببعض التحسينات عليها ، خصوصا إذا كانت نقطة الدخول قريبة
من مستوى حد الشراء أو البيع (Buy Limit) ، على سبيل المثال إذا كان لدينا نسبة ربح أقل ب-10% في مستوى الشراء المعلق يساوي 0.3 (Buy Limit) ، ونسبة ربح أكثر ب 1000% في مستوى 0.35 .
ربما تكون صدفة جيدة لنا ، ولكن لن نعتمد على الصدف ولن نطمع في ربح كبير غير مضمون وليس مستقر .
وينبغي لنا أن لا نستخدم 0.35 لنظام التداول لدينا ، كما هو الحال في المستقبل ، وربما لن يحدث مرة أخرى. إذا ، بدلا من ذلك ، لدينا -10 ٪ و 10 ٪ (بدلا من 1000 ٪) ، قد يكون أكثر أمانا للإستخدام.
عموما ، ينبغي بناء نظامنا تجاري لأسوأ سيناريو ممكن ، حتى يكون التداول على "الحقيقي" أفضل ، ثم أثناء الاختبار ، سنقوم بالبقاء على قيد الحياة ، ولكن ليس العكس إن شاء الله .
بأمكننا تغيير قيم حدود المؤشر ، حتى نتحصل على أكثر فرص ممكنة للمتاجرة ، بحيث يمكننا أن نكون على ثقة ، من حيث الإحصاءات ،ومن حيث أداء الإكسبيرت .
وطبعا بإمكاننا تغيير عدد الخلايا العصبية ،حتى نحصل على أحسن وضعية ،ولا أعتقد أنه سيكون الأمر سهلا .
ويمكننا أن نغيير عدد المدخلات ومتخلفات المدخلات (lagg). فمن الممكن أن نحسن هذا ، ولكن ليس من المرجح جدا أن يحدث.
وبالطبع ، يمكننا أن نجرب مؤشرات مختلفة.
كيف نحسنها ؟
كما ذكرنا سابقا ،أن حاولنا أن نجرب كل الإحتمالات ، فلن تنتهي المحاولات ، لذلك سنقوم بعض التحيل ، سنقوم بإنشاء مجموعة إعدادات مسبقا التعريف ، التي نعتقده أنها معقولة ، وادخالها بعد ذلك في البرنامج .
للقيام بعض الحسابات الممكنة ، يجب أن نعلم أن ، Clv-1,و-Clv-2 ،هما على الأرجح مهمين ، ولكن ماذا عن Clv-128 ؟ وذا كان لدينا Clv 128 ، هل سنحتاج إلى Clv -129,على الأرجح لا ، إذا سيكون لدينا شيئا من هذا القبيل Clv-1, Clv-2, Clv-4, Clv-8, ... Clv-128 ، مع وجود اختلافات قليلة فقط، الأمر الذي سيجعل مدة الحساب أقصر بألاف المرات .
هل الاكسبيرت سينجح دائما ؟
مالذي بالضبط نرغب في النبؤ إليه ؟ إلى هذه النقطة ، استعملنا شارت الساعة لزوج اليورو ، و كان توقعنا حول شمعة ال-CLV المقبلة ، أي Clv-2 ستكون أفضل ؟؟ وماذا عن Clv-3 ؟
أيضا ، وخاصة بالنظر إلى ضعف أداء نظامنا التجاري الأول ، سيكون من الجميل أن تعرف ، أنه يمكن تحقيق الهدف (تجارة مربحة).
للإجابة على هذه الأسئلة ، دعونا نشئ برنامج اختبار بسيط. و نفترض أن توقعاتنا هو بدقة 100 ٪ ، وعلى أساس هذه الافتراض ، سوف نستخدم CLV+N.ليس من توقع الشبكة بل سنأخذ البيانات من المستقبل ، واستخدامها بدلا من التنبؤ المنتج من الشبكة العصبية . ومن شأن هذا النهج سيتيح لنا بعض الأفكار عن ما يمكن توقعه.
عند النظر إلى النتائج ، يرجى أن نضع في اعتبارنا ، أن لم نستخدم أي إدارة اموال مسبقة ،و يتم تعيين حجم العقد لدينا 100 دولار. إذا كنت تستخدم كثيرا الأحجام المتغيرة ، النتائج سوف تكون مختلفة بشكل كبير. ولكن حتى في تحديد حجم العقد 0،1 سنرى (أدناه) أن الحصول على المعلومات يكون من المستقبل.
forex_nn_02.tsc, part 1
كود PHP:void main()
{
OUT_CLEANUP();
string strImagePath =
"c:\\S_Projects\\CortexPro\\data\\stocks_nn\\images\\";
string strForexName = "EURUSD_H1";
PRINT("%s\r\n", "Deleting image files...");
array_s arrDirList =
GET_DIR(strImagePath, 0, "*.png");
for(double n = 0; n < ARRAY_SIZE(arrDirList); n = n + 1)
{
F_UNLINK(arrDirList[n]);
}
// ***** Loading data
string strDataFileName =
"c:\\S_Projects\\CortexPro\\data\\samples\\forex\\"
+ strForexName + ".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);
والفرق الوحيد هو في الجزء الذي يحصل فيه على قائمة من الملفات في مسار "الصور"
ثم يقوم بحذف جميع الملفات ذات صيغة PNG والسبب من هذا الكود بسيط ،خلال تجربتنا سنقوم بإنشاء عدة
صور بل قد يكون الالاف ولكن لن نحتاجها بعد نهاية الإختبار لذلك عند بداية الكود نقوم بحذف الصور التي انشأها السكريب الماضي
forex_nn_02.tsc, part 2
كود PHP:array arrClvIntervals = CREATE_ARRAY(0);
arrClvIntervals[0] = 4;
arrClvIntervals[1] = 6;
arrClvIntervals[2] = 8;
arrClvIntervals[3] = 12;
arrClvIntervals[4] = 16;
arrClvIntervals[5] = 24;
arrClvIntervals[6] = 32;
arrClvIntervals[7] = 48;
array arrMa = CREATE_ARRAY(0);
arrMa[0] = 1; // No MA
arrMa[1] = 4;
arrMa[2] = 7;
arrMa[3] = 14;
// How far in future we want to predict
array arrOutLag = CREATE_ARRAY(0);
arrOutLag[0] = 0; // Current
arrOutLag[1] = 1; // 1 bar
arrOutLag[2] = 2;
arrOutLag[3] = 3;
arrOutLag[4] = 4;
// Note: from this point coinsides with arrClvIntervals
arrOutLag[5] = 6;
arrOutLag[6] = 8;
arrOutLag[7] = 12;
arrOutLag[8] = 16;
arrOutLag[9] = 24;
arrOutLag[10] = 32;
arrOutLag[11] = 48;
array arrStopLoss = CREATE_ARRAY(0);
arrStopLoss[0] = 0.0025;
arrStopLoss[1] = 0.005;
arrStopLoss[2] = 0.0075;
arrStopLoss[3] = 0.01;
array arrClv = CREATE_ARRAY(0);
array arrClvSmooth = CREATE_ARRAY(0);
double nNetNum = 0;
double nRemoveFirst = 128;
string strXML = "<forex>\r\n";
double nInterval;
double nMaIdx;
double nMa;
double nOutLagIdx;
double nOutLag;
double dStopLoss;
array arrBalance = CREATE_ARRAY(0);
array arrBalanceBuy = CREATE_ARRAY(0);
array arrBalanceSell = CREATE_ARRAY(0);
double nTradeNumber;
double dExpectedCycles = ARRAY_SIZE(arrClvIntervals)
* ARRAY_SIZE(arrMa) * ARRAY_SIZE(arrOutLag) *
ARRAY_SIZE(arrStopLoss) * 6 * 10 * 10;
فقط بضعة تعليقات. نحن لا نريد أن نجرب جميع القيم الممكنة ، على سبيل المثال ، الفاصل الزمني ال CLV. بدلا من ذلك ، يمكننا إنشاء صفيف ، الذي يحتوي على القيملتي فقط سنختبرها. ثم (أنظر أدناه) سوف نسير من خلال هذه المجموعة.
وقف الخسائر هي جزء مهم في أي استراتيجية تداول ، لذلك قررت أن نجرب أكثر الإحتمالات الممكنة . انها فكرة خطيرة ، ولكن سيسهل علينا تحسين برنامجنا .
وأنا على التخطيط لاختبار قيم مختلفة لمستويات شراء وبيع ، ولكن سيتم ذلك في الدورة التكرارية ، من دون استخدام المصفوفات.
خلافا لما حدث في المثال السابق ، نريد أن يكون لدينا ملف إكس إم إل كبير، يحتوي على العديد من الصور. للقيام بذلك ،قمت بتحويل كود إنشاء ال-XML خارج وظيفة إنشاء الشارت.
علما أننا نستعمل 0 ،كتخلف في ملف ال-lagg ،وهذا يعني،أن سنقوم بتجرب مؤشر ال-CLV الذي لم يتم تخلفه بعد من المستقبل،فقط لنشئ فكرة حول كيف سيكون الاكسبرت بدون شبكة عصبية (رهيب ،سيخسر كل المال )
برنامج كورتيكس يستخدم متصفح الإنترنت إكسبلورر ،لإظهار صفحات ال-XML ، عندما تصبح الصفحات كبيرة
،سيستخدم ذاكرة كبيرة من جهازك ؛ إن كان جهازك لا يملك ذاكرة كبيرا ،بإمكانك إنشاء صفحة ال-XML ،ثم لا نفتحها بل كورتيكس ،ولكن مباشرة بالانترنت اكسبلورر .
الآن سننشئ السكريبت الذي نجرب من خلاله مجموعات مختلفة من الإعدادات *:
forex_nn_02.tsc, part 3
كود PHP:double nWinners = 0;
for(double nIntervalIdx = 0;
nIntervalIdx < ARRAY_SIZE(arrClvIntervals);
nIntervalIdx = nIntervalIdx + 1)
{
nInterval = arrClvIntervals[nIntervalIdx];
ARRAY_REMOVE(arrClv, -1);
arrClv = CreateClv(nInterval);
for(nMaIdx = 0; nMaIdx < ARRAY_SIZE(arrMa);
nMaIdx = nMaIdx + 1)
{
OUT_CLEANUP();
nMa = arrMa[nMaIdx];
ARRAY_REMOVE(arrClvSmooth, -1);
arrClvSmooth = EXP_MVAVG(arrClv, nMa);
for(nOutLagIdx = 0; nOutLagIdx < ARRAY_SIZE(arrOutLag);
nOutLagIdx = nOutLagIdx + 1)
{
nOutLag = arrOutLag[nOutLagIdx];
for(double nStopIdx = 0; nStopIdx <
ARRAY_SIZE(arrStopLoss);
nStopIdx = nStopIdx + 1)
{
dStopLoss = arrStopLoss[nStopIdx];
for(double dTakeProfit = 0; dTakeProfit <= 0.05;
dTakeProfit = dTakeProfit + 0.01)
{
for(double nBuyIdx = 0; nBuyIdx < 10;
nBuyIdx = nBuyIdx + 1)
{
double dBuyLevel = 0.15 + 0.02 * nBuyIdx;
for(double nSellIdx = 0; nSellIdx < 10;
nSellIdx = nSellIdx + 1)
{
double dSellLevel =
0.85 - 0.02 * nSellIdx;
PRINT("%.0f", nNetNum, " of %.0f",
dExpectedCycles);
Test();
PRINT(" (%.0f)\r\n", nWinners);
if(ARRAY_SIZE(arrBalance) <= 1 ||
(ARRAY_SIZE(arrBalance) > 1 &&
(arrBalance[ARRAY_SIZE(arrBalance)
- 1] <= 5000 ||
arrBalanceBuy[ARRAY_SIZE(
arrBalanceSell) - 1]
<= 3000 ||
arrBalanceSell[ARRAY_SIZE(
arrBalanceSell) - 1]
<= 2000)) ||
nTradeNumber < 50)
{
continue nBuySellIdx;
}
nWinners = nWinners + 1;
Chart(strForexName);
}
}
}
}
}
}
}
strXML = strXML + "</forex>\r\n";
SAVE_XML(strImagePath, "chart_forex_nn", "chart_forex_nn",
"root", strXML);
SHOW_XML(strImagePath + "chart_forex_nn.xml");
PRINT("%s\r\n", "Done");
}
في كل دورة نقوم بتعيين بعض المتغيريات
(على سبيل المثال ،المتغير nInterval للدورة الخارجية ).
بهذه الطريقة سوف تقوم الدورة بتعيين قيم لجميع عناصر الصفيف المناسب ، مرة واحدة . ثم داخلها ، يتم استخدام دورة لداخلية ، وهلم جرا ، بحيث يتم اختبار جميع مجموعات عناصر الصفيف.
في الدورة الأعمق قمنا بإستدعاء الدالة TEST() لإختبار التداول ، والدلة CHART() لإضافة صورة جديدة إلى قائمة الصور المحفوظة في الجهاز ،
علما ، أن الدالة CHART() لا تظهر أي صور ، حتى يتم الانتهاء من جميع الدورات .
Test() وCreateClv ()،هي وظائف تقريبا نفسها كما في المثال السابق. الفارق الحقيقي الوحيد هو أنه استدعيناهم أكثر من مرة دعا أكثر من مرة واحدة. للقيام بذلك ،وقمنا بإستدعاء ARRAY_REMOVE لتنظيف الصفائف.
ملاحظة :سنقوم فقط بإظهار الشارتات المتكونة من الإعدادات التي تنتج نتائج إيجابية ،وسنستعمل الدالة "Continue" لتخطي الدالة CHART() ، في الحالات السلبية
وأخيرا ، لدينا الآن خاصية Take Profit ، لذلك برنامجنا يمكن أن يكون قليلا أكثر مرونة.
forex_nn_02.tsc, part 4
كود PHP:void Test()
{
nNetNum = nNetNum + 1;
ARRAY_REMOVE(arrBalance, -1);
arrBalance[0] = 1000;
ARRAY_REMOVE(arrBalanceBuy, -1);
arrBalanceBuy[0] = 0;
ARRAY_REMOVE(arrBalanceSell, -1);
arrBalanceSell[0] = 0;
array arrBars = CREATE_ARRAY(0);
arrBars[0] = 0;
// 0.1 lot
double dLotSize = 100;
// 1 buy, -1 sell, 0 - none
double nType = 0;
double dSpread = 0.0005;
double bStop;
// Max. Drawdown
double dMaxDrawDown = 0;
// Used to calculate drawdown
double dCurrentMax = arrBalance[0];
nTradeNumber = 0;
double nTradeNumberBuy = 0;
double nTradeNumberSell = 0;
double dOpenPrice;
double dStop;
double dTp = 0;
for(double nBar = nRemoveFirst + 1;
nBar < ARRAY_SIZE(arrClose) - nRemoveFirst;
nBar = nBar + 1)
{
if(nType != 0)
{
bStop = 0;
double dClosedAt;
// If BUY and stop loss or take profit reached
if(nType == -1 && (arrLow[nBar] <= dStop ||
(dTakeProfit > 0
&& arrHigh[nBar] >= dTp - dSpread)))
{
arrBalance[ARRAY_SIZE(arrBalance)] =
arrBalance[ARRAY_SIZE(arrBalance) - 1]
+ 100 * (arrLow[nBar] - dOpenPrice) * dLotSize;
arrBalanceBuy[ARRAY_SIZE(arrBalanceBuy)] =
arrBalanceBuy[ARRAY_SIZE(arrBalanceBuy) - 1]
+ 100 * (arrLow[nBar] - dOpenPrice) * dLotSize;
arrBalanceSell[ARRAY_SIZE(arrBalanceSell)] =
arrBalanceSell[ARRAY_SIZE(arrBalanceSell) - 1];
bStop = 1;
dClosedAt = arrLow[nBar];
}
else
{
if(nType == 1 && (arrHigh[nBar] >= dStop - dSpread ||
(dTakeProfit > 0 && arrLow[nBar] <= dTp)))
{
arrBalance[ARRAY_SIZE(arrBalance)] =
arrBalance[ARRAY_SIZE(arrBalance) - 1] +
100 * (dOpenPrice - arrHigh[nBar] - dSpread)
* dLotSize;
arrBalanceBuy[ARRAY_SIZE(arrBalanceBuy)] =
arrBalanceBuy[ARRAY_SIZE(arrBalanceBuy) - 1];
arrBalanceSell[ARRAY_SIZE(arrBalanceSell)] =
arrBalanceSell[ARRAY_SIZE(arrBalanceSell) - 1] +
100 * (dOpenPrice - arrHigh[nBar] - dSpread)
* dLotSize;
bStop = 1;
dClosedAt = arrHigh[nBar];
}
}
if(bStop == 1)
{
nType = 0;
arrBars[ARRAY_SIZE(arrBars)] = nBar;
}
}
double dDrawDown = (dCurrentMax -
arrBalance[ARRAY_SIZE(arrBalance) - 1]) / dCurrentMax;
dMaxDrawDown = MAX(dMaxDrawDown, dDrawDown);
dCurrentMax = MAX(dCurrentMax, arrBalance[
ARRAY_SIZE(arrBalance) - 1]);
if(arrBalanceBuy[ARRAY_SIZE(arrBalanceBuy) - 1] < -500 ||
arrBalanceSell[ARRAY_SIZE(arrBalanceSell) - 1] < -500 ||
dMaxDrawDown > 0.2)
{
break nBar;
}
if(nType != -1 &&
arrClvSmooth[nBar - 1 + nOutLag] <= dBuyLevel &&
arrClvSmooth[nBar + nOutLag] >= dBuyLevel)
{
if(nType == 1)
{
arrBalance[ARRAY_SIZE(arrBalance)] =
arrBalance[ARRAY_SIZE(arrBalance) - 1] +
100 * (dOpenPrice - arrHigh[nBar] - dSpread)
* dLotSize;
arrBalanceSell[ARRAY_SIZE(arrBalanceSell)] =
arrBalanceSell[ARRAY_SIZE(arrBalanceSell) - 1] +
100 * (dOpenPrice - arrHigh[nBar] - dSpread)
* dLotSize;
arrBalanceBuy[ARRAY_SIZE(arrBalanceBuy)] =
arrBalanceBuy[ARRAY_SIZE(arrBalanceBuy) - 1];
arrBars[ARRAY_SIZE(arrBars)] = nBar;
}
dOpenPrice = arrHigh[nBar];
dStop = dOpenPrice - dStopLoss;
dTp = dOpenPrice + dTakeProfit;
nType = -1;
nTradeNumber = nTradeNumber + 1;
nTradeNumberBuy = nTradeNumberBuy + 1;
}
else
{
if(nType != 1 &&
arrClvSmooth[nBar - 1 + nOutLag] >= dSellLevel &&
arrClvSmooth[nBar + nOutLag] <= dSellLevel)
{
if(nType == -1)
{
arrBalance[ARRAY_SIZE(arrBalance)] =
arrBalance[ARRAY_SIZE(arrBalance) - 1] +
100 * (arrLow[nBar] - dOpenPrice) * dLotSize;
arrBalanceBuy[ARRAY_SIZE(arrBalanceBuy)] =
arrBalanceBuy[ARRAY_SIZE(arrBalanceBuy) - 1] +
100 * (arrLow[nBar] - dOpenPrice) * dLotSize;
arrBalanceSell[ARRAY_SIZE(arrBalanceSell)] =
arrBalanceSell[ARRAY_SIZE(arrBalanceSell) - 1];
arrBars[ARRAY_SIZE(arrBars)] = nBar;
}
dOpenPrice = arrLow[nBar];
dStop = dOpenPrice + dStopLoss;
dTp = dOpenPrice - dTakeProfit;
nType = 1;
nTradeNumber = nTradeNumber + 1;
nTradeNumberSell = nTradeNumberSell + 1;
}
}
}
// 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;
arrBalanceSell[ARRAY_SIZE(arrBalanceSell)] =
arrBalanceSell[ARRAY_SIZE(arrBalanceSell) - 1] +
100 * (dOpenPrice - arrHigh[nBar - 1] - dSpread)
* dLotSize;
arrBalanceBuy[ARRAY_SIZE(arrBalanceBuy)] =
arrBalanceBuy[ARRAY_SIZE(arrBalanceBuy) - 1];
arrBars[ARRAY_SIZE(arrBars)] = nBar - 1;
}
else
{
if(nType == -1)
{
arrBalance[ARRAY_SIZE(arrBalance)] =
arrBalance[ARRAY_SIZE(arrBalance) - 1] +
100 * (arrLow[nBar - 1] - dOpenPrice)
* dLotSize;
arrBalanceBuy[ARRAY_SIZE(arrBalanceBuy)] =
arrBalanceBuy[ARRAY_SIZE(arrBalanceBuy) - 1] +
100 * (arrLow[nBar - 1] - dOpenPrice) * dLotSize;
arrBalanceSell[ARRAY_SIZE(arrBalanceSell)] =
arrBalanceSell[ARRAY_SIZE(arrBalanceSell) - 1];
arrBars[ARRAY_SIZE(arrBars)] = nBar - 1;
}
}
}
// -------------------
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;
}
الدالة chart()،سيتم تقسيمها القطعتين ( الرأس والذيل )
وينبغي أن تكون مكتوبة على ملف XML مرة واحدة فقط ، ولذلك تم نقلها إلى الجزء الرئيسي من البرنامج.
واستخدمنا أيضا عداد ،لحفظ الملفات بأسماء مختلفة ،معلومات الإعدادات المستخدمة في إنشاء شارت معين ،يتم كتابتها في رأس الصور ، حتى يسهل علينا التعرف على الشارت والإعدادات المستخدمة .
وخيرا يتم حفظ الشارت الفائزة يعني التي تحتوي على أعلى رصيد نهائي مقارنة برصيد الإنطلاق
*
forex_nn_02.tsc, part5
كود PHP:void Chart(strForexName)
{
string strProfitPath = strImagePath +
strForexName + NUM2STR(nNetNum, "%.0f") + ".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") +
NUM2STR(nInterval, ", CLV: %.0f") +
NUM2STR(nMa, ", MA: %.0f") +
NUM2STR(nOutLag, ", Out.Lag: %.0f") +
NUM2STR(dStopLoss, ", Stop: %f") +
NUM2STR(dTakeProfit, ", TakeProfit: %f") +
NUM2STR(dBuyLevel, ", Buy: %f") +
NUM2STR(dSellLevel, ", Sell: %f\r\n");
strXML = strXML + "\t\t</symbol>\r\n";
strXML = strXML + "\t\t" +
SAVE_CHART(400, 500, 0, strProfitPath, arrBars, arrBalance);
strXML = strXML + "\t</symbol>\r\n";
}
نشغل السكريبت الآن (سيستغرق بغض الوقت للإنتهاء )،وسينتهي بإظهار صفحة XML تحتوي على شارت الإعدادات الفائزة:
بعض النتائج جيدة ،ولكن بما اننا نستخدم بيانات من المستقبل ،فهذا البرنامج لن ينجح طويلا ، في الواقع ، اذا نظرتم الى وظيفة () TEST، ستلاحظ توقف الدورة قبل أن نصل إلى العنصر الأخير من arrClose :
كود PHP:for(nBar = nRemoveFirst + 1; nBar <
ARRAY_SIZE(arrClose) - nRemoveFirst; ...
ولكن بإمكاننا إستعمال الشبكة العصبية للتنبؤ بها ...
- 11-10-2010, 12:10 PM #231
رد: ๑۩۞۩๑( على بركة الله دورة إنشاء اكسبيرت يعتمد على الشبكة العصبية )๑۩۞۩๑
بارك الله تعالى فيك وأعزك اخى أحمد وزادك من علمه وفضله
الحمد لله تعالى على العودة الكريمة أخى الكريم
سأقرأ الدرس بتمعن ولكن غدا وساعود أليك بأمر الله تعالى مرة أخرى
تقبل كامل احترامى وتقديرى أخى الكريم
- 11-10-2010, 11:13 PM #232
رد: ๑۩۞۩๑( على بركة الله دورة إنشاء اكسبيرت يعتمد على الشبكة العصبية )๑۩۞۩๑
بارك الله فيك
- 12-10-2010, 03:30 PM #233
رد: ๑۩۞۩๑( على بركة الله دورة إنشاء اكسبيرت يعتمد على الشبكة العصبية )๑۩۞۩๑
لم اكمل قراءة الدروس ولكن مافهمت حتى الان كانك تقول
(( ان اسكبرت هو من يقوم بالتحليل عنا ويدخل في الفرص المناسبة حسب تحليله السابق وفهمه للمعطيات ))
- 03-11-2010, 02:45 AM #234
- 02-12-2010, 11:29 PM #235
رد: ๑۩۞۩๑( على بركة الله دورة إنشاء اكسبيرت يعتمد على الشبكة العصبية )๑۩۞۩๑
ادماج الشبكة العصبية مع الاكسبيرت
الان ،نعلم ماذا يجب أن نقوم به . إذا لدينا لمحة معلومات من المستقبل ، يمكننا استعمالها في إنشاء اكسبيرت
وذلك باستخدام الشبكة العصبية لتنبؤ بدلا من اقتباس المستقبل .
واريد أن أذكركم مرة أخرى أن الهدف من هذه الدورة هو أن تعلم كيفية إنشاء اكسبيرت يعتمد على الشبكة العصبية
ولا يعني ذلك أنه سيكون اكسبيرت مثالي ،ولاكن يمكن أن يكون ،من خلال بحثكم و تجاربكم بعد الدورة.
في هذا الدرس سنقوم بتجريب عدة تركيبات ومحاولات (شارت،وصف الخسارة ،جني الربح ، مستويات البيع والشراء ...إلخ )
السكريبت أدناه يحتوي على بعض التعليقات ولكن يجب أن تحاولوا فاهمه بدون مساعدة خصوصا بعد هذا الكم الهائل من الأمثلة ودرس البرمجة التي مررنا بها في هذه الدورة:
forex_nn_03.tsc
كود PHP:
void main()
{
OUT_CLEANUP();
string strImagePath =
"c:\\S_Projects\\CortexPro\\data\\stocks_nn\\images\\";
PRINT("%s\r\n", "Deleting image files...");
array_s arrDirList =
GET_DIR(strImagePath, 0, "*.png");
for(double n = 0; n < ARRAY_SIZE(arrDirList); n = n + 1)
{
F_UNLINK(arrDirList[n]);
}
string strForexName = "EURUSD_H1";
string strNnPath =
"c:\\S_Projects\\CortexPro\\data\\stocks_nn\\nn\\";
string strNnFileName = strNnPath + strForexName + ".nn";
PRINT("%s\r\n", "Deleting nn files...");
array_s arrDirList =
GET_DIR(strNnPath, 0, "*.nn");
for(double n = 0; n < ARRAY_SIZE(arrDirList); n = n + 1)
{
F_UNLINK(arrDirList[n]);
}
// ------------
string strDataFileName =
"c:\\S_Projects\\CortexPro\\data\\samples\\forex\\"
+ strForexName + ".TXT";
string strLagFileName =
"c:\\S_Projects\\CortexPro\\data\\stocks_nn\\forex\\"
+ strForexName + ".lgg";
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);
// Interval, Ma, OutLag
array_s arrParameters = CREATE_ARRAY_S(0);
arrParameters[0] = "24,4,2";
arrParameters[1] = "24,4,3";
arrParameters[2] = "24,7,2";
arrParameters[3] = "24,7,3";
arrParameters[4] = "24,7,4";
arrParameters[5] = "32,4,2";
arrParameters[6] = "32,4,3";
arrParameters[7] = "32,7,4";
arrParameters[8] = "48,7,8";
array arrClv;
array arrClvSmooth;
double nNetNum = 1;
double nRemoveFirst = 200;
double dStopError = 0;
double nStopEpoch;
array arrLags = CREATE_ARRAY(0);
array_s arrStrLags = CREATE_ARRAY_S(0)
// ATTN: These lags are based on nWinLag.
// Example: nWinLag = 1, then each number
// should be increased by 1
arrStrLags[0] =
"18,0,1,2,3,4,6,8,12,14,16,20,24,28,32,40,48,56,64";
arrStrLags[1] =
"20,0,1,2,3,4,6,8,12,14,16,20,24,28,32,50,70,90,110,130,150";
array arrBalance = CREATE_ARRAY(0);
array arrBalanceBuy = CREATE_ARRAY(0);
array arrBalanceSell = CREATE_ARRAY(0);
array arrWinInterval = CREATE_ARRAY(0);
array arrWinMa = CREATE_ARRAY(0);
array arrWinLag = CREATE_ARRAY(0);
array arrWinStopLoss = CREATE_ARRAY(0);
array arrWinTakeProfit = CREATE_ARRAY(0);
array arrWinBuyLevel = CREATE_ARRAY(0);
array arrWinSellLevel = CREATE_ARRAY(0);
array arrWinNeurons = CREATE_ARRAY(0);
array_s arrWinNnLags = CREATE_ARRAY_S(0);
array arrWinProfit = CREATE_ARRAY(0);
array arrWinProfitBuy = CREATE_ARRAY(0);
array arrWinProfitSell = CREATE_ARRAY(0);
array arrNn = CREATE_ARRAY(0);
array arrStopLoss = CREATE_ARRAY(0);
arrStopLoss[0] = 0.005;
arrStopLoss[1] = 0.0075;
arrStopLoss[2] = 0.01;
arrStopLoss[3] = 0.015;
arrStopLoss[4] = 0.02;
string strParam;
string strToken;
double nMa;
double nOutLag;
double hNn;
double dBuyLevel;
double dSellLevel;
double nInterval;
double nExtractRecords;
double nCounter = 0;
double nSelectedCounter = 0;
double dExpectedCycles =
ARRAY_SIZE(arrParameters) * ARRAY_SIZE(arrStrLags);
for(double nParIdx = 0; nParIdx < ARRAY_SIZE(arrParameters);
nParIdx = nParIdx + 1)
{
strParam = arrParameters[nParIdx];
strToken = GET_TOKEN(strParam, ",");
nInterval = STR2NUM(strToken);
arrClv = CreateClv(nInterval);
strToken = GET_TOKEN(strParam, ",");
nMa = STR2NUM(strToken);
arrClvSmooth = EXP_MVAVG(arrClv, nMa);
strToken = GET_TOKEN(strParam, ",");
nOutLag = STR2NUM(strToken);
for(double nLagIdx = 0; nLagIdx < ARRAY_SIZE(arrStrLags);
nLagIdx = nLagIdx + 1)
{
double nNumOfLags;
string strLagBuf = arrStrLags[nLagIdx];
CreateLagFile(strLagBuf, nRemoveFirst);
double nNeurons = (nNumOfLags + 1) / 2 + 1;
nStopEpoch = nNeurons * 1000;
nCounter = nCounter + 1;
NewNn(arrLags, dStopError, nStopEpoch, nNeurons);
TeachNn();
hNn = OPEN_NN(strNnFileName, bIsPathRelative);
APPLY_NN(hNn, nExtractRecords, 1.0, 1,
arrClvSmooth, arrLags, 1, arrNn);
CLOSE_NN(hNn);
OUT_CLEANUP();
for(double nStopIdx = 0; nStopIdx < ARRAY_SIZE(arrStopLoss);
nStopIdx = nStopIdx + 1)
{
double dStopLoss = arrStopLoss[nStopIdx];
for(double dTakeProfit = 0; dTakeProfit <= 0.05;
dTakeProfit = dTakeProfit + 0.01)
{
for(double nBuySellIdx = 0; nBuySellIdx < 24;
nBuySellIdx = nBuySellIdx + 1)
{
dBuyLevel = 0.1 + 0.01 * nBuySellIdx;
dSellLevel = 0.9 - 0.01 * nBuySellIdx;
PRINT("%.0f", nCounter, " of %.0f",
dExpectedCycles, " (%.0f): ",
nSelectedCounter, "%.0f\r\n", nNetNum);
Test();
if(arrBalanceBuy[ARRAY_SIZE(arrBalanceBuy) - 1]
> 1000
&& arrBalanceSell[ARRAY_SIZE(arrBalanceSell)
- 1] > 1000)
{
nSelectedCounter = nSelectedCounter + 1;
SaveWin();
double dBuyLevelTmp = dBuyLevel;
double dSellLevelTmp = dSellLevel;
dBuyLevel = dBuyLevel - 0.003;
dSellLevel = dSellLevel + 0.003;
Test();
if(arrBalanceBuy[ARRAY_SIZE(arrBalanceBuy)
- 1] > 1000
&& arrBalanceSell[ARRAY_SIZE(
arrBalanceSell) - 1] > 1000)
{
SaveWin();
}
dBuyLevel = dBuyLevel + 0.006;
dSellLevel = dSellLevel - 0.006;
Test();
if(arrBalanceBuy[ARRAY_SIZE(arrBalanceBuy)
- 1] > 1000
&& arrBalanceSell[ARRAY_SIZE(
arrBalanceSell) - 1] > 1000)
{
SaveWin();
}
dBuyLevel = dBuyLevelTmp;
dSellLevel = dSellLevelTmp;
}
}
}
}
}
}
Chart(strForexName);
PRINT("%s\r\n", "Done");
}
// ----------------
void Test()
{
nNetNum = nNetNum + 1;
ARRAY_REMOVE(arrBalance, -1);
arrBalance[0] = 1000;
ARRAY_REMOVE(arrBalanceBuy, -1);
arrBalanceBuy[0] = 1000;
ARRAY_REMOVE(arrBalanceSell, -1);
arrBalanceSell[0] = 1000;
array arrBars = CREATE_ARRAY(0);
arrBars[0] = 0;
double dLotSize = 100; // 0.1 lot
double nType = 0; // 1 buy, -1 sell, 0 - none
double dSpread = 0.0005;
double bStop;
double dMaxDrawDown = 0; // Max. Drawdown
double dCurrentMax = arrBalance[0]; // To calculate drawdown
double nTradeNumber = 0;
double nTradeNumberBuy = 0;
double nTradeNumberSell = 0;
double dOpenPrice;
double dStop;
double dTp = 0;
for(double nBar = nRemoveFirst + 1;
nBar < ARRAY_SIZE(arrClose) - nRemoveFirst;
nBar = nBar + 1)
{
if(nType != 0)
{
bStop = 0;
double dClosedAt;
// If BUY and stop loss or take profit reached
if(nType == -1 && (arrLow[nBar] <= dStop
|| (dTakeProfit > 0
&& arrHigh[nBar] >= dTp - dSpread)))
{
arrBalance[ARRAY_SIZE(arrBalance)] =
arrBalance[ARRAY_SIZE(arrBalance) - 1]
+ 100 * (arrLow[nBar] - dOpenPrice) * dLotSize;
arrBalanceBuy[ARRAY_SIZE(arrBalanceBuy)] =
arrBalanceBuy[ARRAY_SIZE(arrBalanceBuy) - 1]
+ 100 * (arrLow[nBar] - dOpenPrice) * dLotSize;
arrBalanceSell[ARRAY_SIZE(arrBalanceSell)] =
arrBalanceSell[ARRAY_SIZE(arrBalanceSell) - 1];
bStop = 1;
dClosedAt = arrLow[nBar];
}
else
{
if(nType == 1 && (arrHigh[nBar] >= dStop - dSpread ||
(dTakeProfit > 0 && arrLow[nBar] <= dTp)))
{
arrBalance[ARRAY_SIZE(arrBalance)] =
arrBalance[ARRAY_SIZE(arrBalance) - 1] +
100 * (dOpenPrice - arrHigh[nBar] - dSpread)
* dLotSize;
arrBalanceBuy[ARRAY_SIZE(arrBalanceBuy)] =
arrBalanceBuy[ARRAY_SIZE(arrBalanceBuy) - 1];
arrBalanceSell[ARRAY_SIZE(arrBalanceSell)] =
arrBalanceSell[ARRAY_SIZE(arrBalanceSell) - 1] +
100 * (dOpenPrice - arrHigh[nBar] - dSpread)
* dLotSize;
bStop = 1;
dClosedAt = arrHigh[nBar];
}
}
if(bStop == 1)
{
nType = 0;
arrBars[ARRAY_SIZE(arrBars)] = nBar;
}
}
if(arrBalanceBuy[ARRAY_SIZE(arrBalanceBuy) - 1] < 500 ||
arrBalanceSell[ARRAY_SIZE(arrBalanceSell) - 1] < 500)
{
break nBar;
}
double dDrawDown = (dCurrentMax -
arrBalance[ARRAY_SIZE(arrBalance) - 1]) / 1000;
dMaxDrawDown = MAX(dMaxDrawDown, dDrawDown);
dCurrentMax = MAX(dCurrentMax,
arrBalance[ARRAY_SIZE(arrBalance) - 1]);
if(nType != -1 && arrNn[nBar - 1] <= dBuyLevel
&& arrNn[nBar] >= dBuyLevel)
{
if(nType == 1)
{
arrBalance[ARRAY_SIZE(arrBalance)] =
arrBalance[ARRAY_SIZE(arrBalance) - 1] +
100 * (dOpenPrice - arrHigh[nBar] - dSpread)
* dLotSize;
arrBalanceSell[ARRAY_SIZE(arrBalanceSell)] =
arrBalanceSell[ARRAY_SIZE(arrBalanceSell) - 1] +
100 * (dOpenPrice - arrHigh[nBar] - dSpread)
* dLotSize;
arrBalanceBuy[ARRAY_SIZE(arrBalanceBuy)] =
arrBalanceBuy[ARRAY_SIZE(arrBalanceBuy) - 1];
arrBars[ARRAY_SIZE(arrBars)] = nBar;
}
dOpenPrice = arrHigh[nBar];
dStop = dOpenPrice - dStopLoss;
dTp = dOpenPrice + dTakeProfit;
nType = -1;
nTradeNumber = nTradeNumber + 1;
nTradeNumberBuy = nTradeNumberBuy + 1;
}
else
{
if(nType != 1 && arrNn[nBar - 1] >= dSellLevel
&& arrNn[nBar] <= dSellLevel)
{
if(nType == -1)
{
arrBalance[ARRAY_SIZE(arrBalance)] =
arrBalance[ARRAY_SIZE(arrBalance) - 1] +
100 * (arrLow[nBar] - dOpenPrice) * dLotSize;
arrBalanceBuy[ARRAY_SIZE(arrBalanceBuy)] =
arrBalanceBuy[ARRAY_SIZE(arrBalanceBuy) - 1] +
100 * (arrLow[nBar] - dOpenPrice) * dLotSize;
arrBalanceSell[ARRAY_SIZE(arrBalanceSell)] =
arrBalanceSell[ARRAY_SIZE(arrBalanceSell) - 1];
arrBars[ARRAY_SIZE(arrBars)] = nBar;
}
dOpenPrice = arrLow[nBar];
dStop = dOpenPrice + dStopLoss;
dTp = dOpenPrice - dTakeProfit;
nType = 1;
nTradeNumber = nTradeNumber + 1;
nTradeNumberSell = nTradeNumberSell + 1;
}
}
}
// 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;
arrBalanceSell[ARRAY_SIZE(arrBalanceSell)] =
arrBalanceSell[ARRAY_SIZE(arrBalanceSell) - 1] +
100 * (dOpenPrice - arrHigh[nBar - 1] - dSpread)
* dLotSize;
arrBalanceBuy[ARRAY_SIZE(arrBalanceBuy)] =
arrBalanceBuy[ARRAY_SIZE(arrBalanceBuy) - 1];
arrBars[ARRAY_SIZE(arrBars)] = nBar - 1;
}
else
{
if(nType == -1)
{
arrBalance[ARRAY_SIZE(arrBalance)] =
arrBalance[ARRAY_SIZE(arrBalance) - 1] +
100 * (arrLow[nBar - 1] - dOpenPrice) * dLotSize;
arrBalanceBuy[ARRAY_SIZE(arrBalanceBuy)] =
arrBalanceBuy[ARRAY_SIZE(arrBalanceBuy) - 1] +
100 * (arrLow[nBar - 1] - dOpenPrice) * dLotSize;
arrBalanceSell[ARRAY_SIZE(arrBalanceSell)] =
arrBalanceSell[ARRAY_SIZE(arrBalanceSell) - 1];
arrBars[ARRAY_SIZE(arrBars)] = nBar - 1;
}
}
if(arrBalanceBuy[ARRAY_SIZE(arrBalanceBuy) - 1] > 1000 &&
arrBalanceSell[ARRAY_SIZE(arrBalanceSell) - 1] > 1000)
{
PRINT("%.0f", nNetNum, ". Trades: %.0f", nTradeNumber,
" (B: %.0f", nTradeNumberBuy,
", S: %.0f", nTradeNumberSell,
"), Balance: %f", arrBalance[ARRAY_SIZE(arrBalance) - 1],
" (%f", arrBalanceBuy[ARRAY_SIZE(arrBalanceBuy) - 1],
", %f)\r\n", arrBalanceSell[ARRAY_SIZE(arrBalanceSell) - 1],
"\tI: %.0f", nInterval, ", Ma: %.0f", nMa, ", Out: %.0f",
nOutLag,
", Stop: %.4f", dStopLoss, ", Tp: %.4f\r\n", dTakeProfit,
"\tBuy: %.3f", dBuyLevel, ", Sell: %.3f", dSellLevel,
", Neurons: %.0f", nNeurons, ", Lags: %s\r\n", strLagBuf);
}
}
// ---------------
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;
}
// ----------------
void SaveWin()
{
if(arrBalanceBuy[ARRAY_SIZE(arrBalanceBuy) - 1] > 1000
&& arrBalanceSell[ARRAY_SIZE(arrBalanceSell) - 1] > 1000)
{
double nWinIdx = ARRAY_SIZE(arrWinInterval);
arrWinInterval[nWinIdx] = nInterval;
arrWinMa[nWinIdx] = nMa;
arrWinLag[nWinIdx] = nOutLag;
arrWinStopLoss[nWinIdx] = dStopLoss;
arrWinTakeProfit[nWinIdx] = dTakeProfit;
arrWinBuyLevel[nWinIdx] = dBuyLevel;
arrWinSellLevel[nWinIdx] = dSellLevel;
arrWinNeurons[nWinIdx] = nNeurons;
arrWinNnLags[nWinIdx] = arrStrLags[nLagIdx];
arrWinProfit[nWinIdx] = arrBalance[ARRAY_SIZE(arrBalance) - 1];
arrWinProfitBuy[nWinIdx] =
arrBalanceBuy[ARRAY_SIZE(arrBalanceBuy) - 1];
arrWinProfitSell[nWinIdx] =
arrBalanceSell[ARRAY_SIZE(arrBalanceSell) - 1];
string strWinNnFileName = strNnPath + strForexName + "_"
+ NUM2STR(nWinIdx, "%.0f") + ".nn";
F_COPY(strNnFileName, strWinNnFileName);
}
}
// -----------------
void CreateLagFile(string strLags, double nRemoveFirst)
{
double hFile = F_OPEN(strLagFileName, "wb");
F_PRINT(hFile, "%s", "No,Clv");
ARRAY_REMOVE(arrLags, -1);
string strToken = GET_TOKEN(strLags, ",");
nNumOfLags = STR2NUM(strToken);
for(double i = 0; i < nNumOfLags; i = i + 1)
{
strToken = GET_TOKEN(strLags, ",");
arrLags[i] = STR2NUM(strToken) + nOutLag;
}
double nFullLag;
for(i = 0; i < ARRAY_SIZE(arrLags); i = i + 1)
{
nFullLag = arrLags[i];
F_PRINT(hFile, ",ClvMa%.0f", nMa, "-%.0f", nFullLag);
}
F_PRINT(hFile, "%s\r\n", "");
double nNum;
for(i = nRemoveFirst; i < ARRAY_SIZE(arrClose); i = i + 1)
{
nNum = i - nRemoveFirst + 1;
F_PRINT(hFile, "%.0f", nNum, ",%f", arrClvSmooth[i]);
for(double j = 0; j < ARRAY_SIZE(arrLags); j = j + 1)
{
F_PRINT(hFile, ",%f", arrClvSmooth[i - arrLags[j]]);
}
F_PRINT(hFile, "%s\r\n", "");
}
F_CLOSE(hFile);
}
// --------------
void NewNn(array arrLags, double dStopError,
double nStopEpoch, double nNeuronsLayer2)
{
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 = 0; nInputCol < ARRAY_SIZE(arrLags);
nInputCol = nInputCol + 1)
{
arrInputColumns[nInputCol] = nInputCol + 2;
arrInputColumnNames[nInputCol] =
"Clv-" + NUM2STR(arrLags[nInputCol], "%.0f");
}
array arrOutputColumns = CREATE_ARRAY(0);
arrOutputColumns[0] = 1; // Clv
array_s arrOutputColumnNames = CREATE_ARRAY_S(0);
arrOutputColumnNames[0] = "Clv";
nExtractRecords = 0.7 * ARRAY_SIZE(arrClose);
// 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) + 2;
arrOutTabOutputColumns[1] = ARRAY_SIZE(arrLags) + 3;
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);
}
// ----------------
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);
}
// -------------
void Chart(strForexName)
{
PRINT("%s\r\n", "Processing winning configurations...");
string strXML = "<forex>\r\n";
string strWinNnFileName;
for(double nWin = 0; nWin < ARRAY_SIZE(arrWinInterval);
nWin = nWin + 1)
{
PRINT("%.0f...", nWin);
if(arrWinProfit[nWin] > 1000)
{
PRINT(" %s\r\n", "accepted");
nInterval = arrWinInterval[nWin];
nMa = arrWinMa[nWin];
nOutLag = arrWinLag[nWin];
dStopLoss = arrWinStopLoss[nWin];
dTakeProfit = arrWinTakeProfit[nWin];
dBuyLevel = arrWinBuyLevel[nWin];
dSellLevel = arrWinSellLevel[nWin];
strLagBuf = arrWinNnLags[nWin];
arrClv = CreateClv(nInterval);
arrClvSmooth = EXP_MVAVG(arrClv, nMa);
CreateLagFile(strLagBuf, nRemoveFirst);
strWinNnFileName = strNnPath + strForexName +
"_" + NUM2STR(nWin, "%.0f") + ".nn";
hNn = OPEN_NN(strWinNnFileName, bIsPathRelative);
APPLY_NN(hNn, nExtractRecords, 1.0, 1, arrClvSmooth,
arrLags, 1, arrNn);
CLOSE_NN(hNn);
nNetNum = nWin - 1;
Test();
string strImageFileName = strImagePath +
strForexName + "_" +
NUM2STR(nWin, "%.0f") + ".png";
strXML = strXML +
"\t<symbol>\r\n\t\t<symbol>\r\n";
strXML = strXML + "Trades:" + NUM2STR(nTradeNumber, "%.0f")
+ "(Buy:" + NUM2STR(nTradeNumberBuy, "%.0f")
+ ",Sell:" + NUM2STR(nTradeNumberSell, "%.0f")
+ "),I:" + NUM2STR(nInterval, "%.0f")
+ ",Ma:" + NUM2STR(nMa, "%.0f")
+ ",Lag:" + NUM2STR(nOutLag, "%.0f")
+ ",Stop:" + NUM2STR(dStopLoss, "%.4f")
+ ",Tp:" + NUM2STR(dTakeProfit, "%.4f")
+ ",Buy:" + NUM2STR(dBuyLevel, "%.3f")
+ ",Sell:" + NUM2STR(dSellLevel, "%.3f")
+ ",Neurons:" + NUM2STR(arrWinNeurons[nWin], "%.0f")
+ ",Nn Lags:" + strLags
+ ",Balance:" + NUM2STR(arrWinProfit[nWin], "%f")
+ ",Balance long:" +
NUM2STR(arrWinProfitBuy[nWin], "%f")
+ ",Balance short:" +
NUM2STR(arrWinProfitSell[nWin], "%f\r\n");
strXML = strXML + "\t\t</symbol>\r\n";
strXML = strXML + "\t\t" + SAVE_CHART(400, 300, 0,
strImageFileName,
arrBars, arrBalance, arrBalanceBuy, arrBalanceSell);
strXML = strXML + "\t</symbol>\r\n";
}
else
{
PRINT(" %s\r\n", "rejected");
}
}
strXML = strXML + "</forex>\r\n";
SAVE_XML(strImagePath, "chart_forex_nn",
"chart_forex_nn", "root", strXML);
SHOW_XML(strImagePath + "chart_forex_nn.xml");
}
وهذا مثال من الشارت :
كما ترون ، فإن هذا النظام لا يزال يفقد المال. في الفصول التالية سوف نركز على جعلها مربحة بإذن الله .
- 03-12-2010, 12:37 AM #236
رد: ๑۩۞۩๑( على بركة الله دورة إنشاء اكسبيرت يعتمد على الشبكة العصبية )๑۩۞۩๑
اعتذر من الجميع عن التأخير ولكن بحول الله سنواصل إلى آخر الدورة ،ولن يكون هذا الموضوع كسابقه
من المواضيع التي تناولت دراسة الشبكة العصبية ولكنها للأسف لم يواصلوا اصحابها إلا آخر الطريق.
أريد أن انوه مرة أخرى إلى أن هذا الموضوع ودراسة الشبكة العصبية الإصطناعية هو أفضل طريق للنجاح في عالم الفوركس ، فلا يمكن أن تتقن شيء بدون معرفة ،ولايمكن أن تتولد المعرفة بدون عقل،ولا يمكن أن نتحدث على العقل بدون شبكة عصبية ،وكذلك في عالم الفوركس الشبكة العصبية هي سبيل نجاح تجارة العملات .
أعلم أن هناك من يتابع الدورة نوعان من الأعضاء :
* الأول هدفه تعليمي ، معتبرا الدورة مفتاح أو خيط يفتح له طريق ينتهي إن شاء الله بأكسبيرت ناجح بعد جهد وبحث وعامل
*الثاني : يتابع الدورة من حين إلى أخر منتظر آخر مشاركة مني ،واللتي يتوقع ستكون اكسبيرت ناجح
أريد أن أقول إلى الأول ، واصل يا أخي الكريم والله لا يضيع أجر المحسنين ،فمن اشتهد واصاب فله أجران ومن اشتهد ولم يصب فله أجر واحد ، ولا شيء بدون عمل وتعب واجتهاد ، فأتبع الأسباب التي يظهرها لك الله ، وتوكل على الله .
واريد أن أقول لثاني : يا أخي الكريم ، لا يوجد اكسبرت ناجح بدون خبرة وعلم صاحبه ، فلو تأملت في أي اكسبرت نجاح في السوق يعتمد على الشبكة العصبية ك (FABTURBO أو MEGADROID )
فقد تعب اصحابها سنوات عديدة حتى توصلوا إليها ولا تعتقد بشرائك اكسبرت من هذه ستنجح ، لا ، فهم لن يبيعون سنوات العمل والدراسة بدولارات قليلة ، فهذه الإكسبرتات تعمل لفترة معينة وتنجح لفترة محدودة ثم تصبح غير صالحة ، حتى تشتري أخرى (وقد ذكرت سابقا سر هذه الإكسبرتات )
فارجوك أخي الكريم أن توفر وقتك في الدراسة والبحث عوضا عن إنتظار الخبز البارد
تقبلوا ودي واحترامي وشكرا للأستاذ MR.DOLLAR على دعمه للموضوع
- 03-12-2010, 09:03 AM #237
رد: ๑۩۞۩๑( على بركة الله دورة إنشاء اكسبيرت يعتمد على الشبكة العصبية )๑۩۞۩๑
جزاك الله كل خيرا اخي الكريم ونتمنى لك التوفيق
- 03-12-2010, 02:33 PM #238
رد: ๑۩۞۩๑( على بركة الله دورة إنشاء اكسبيرت يعتمد على الشبكة العصبية )๑۩۞۩๑
مواصل معك أخي أحمد
و سعيد بعودتك للموضوع
- 03-12-2010, 05:13 PM #239
رد: ๑۩۞۩๑( على بركة الله دورة إنشاء اكسبيرت يعتمد على الشبكة العصبية )๑۩۞۩๑
وفقك الله اخي الكريم
متابعين معك باهتمام وباذن الله سيتم مراجعة الدروس عاجلا
- 04-12-2010, 09:02 PM #240
رد: ๑۩۞۩๑( على بركة الله دورة إنشاء اكسبيرت يعتمد على الشبكة العصبية )๑۩۞۩๑
بارك الله فيك وزادك الله من فضله ، تابعت الموضوع ولم افهم شي
والعيب بي أنا لأني لا افهم المعادلات ، واتمنى لك التوفيق
وبانتظار النهاية
المواضيع المتشابهه
-
๑۩۞۩๑ فكرة مجنونة للمناقشة ۞ لأننى عايز الشارت يكلمنى ههههه ๑۩۞۩๑
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