النتائج 61 إلى 75 من 192
الموضوع: أصنع أكسبرتك بنفسك
- 02-12-2011, 03:08 PM #61
سلام عليكم استاذى الكريم
أرجوا منك ان لاتهمل الموضوع ولاتتركه بالله عليك وان تتابع فى شرحك السلس هذا بارك الله فيك
أري ان نكمل خطوة خطوة بشرحك الجميل هذا الى نصل بعون الله الى طريقه عمل اكسبيرت مضاعفات وتعرفنا كيفية وضع الاوامر المعلقه الى كل تلك الامور
تقبل ودى استاذنا الكريم ومنتظريين بقيه تكمله دروسك
- 02-12-2011, 11:30 PM #62
جزاك الله كل خير عن الجهد المبذول واتمنى انك تواصل الموضوع لانه مهم للجميع
- 07-12-2011, 09:16 AM #63
أنا كنت أنوي الأستمرار الي مراحل أخري من عمل ملفات DLL وعمل أكسبرتات مضاعفات وربط الأكسبرتات مع شبكة عصبية ايضا ولكني عندما لاحظت قلة المجربين قلت أن تصميم الأكسبرتات موضوع لا يهتم به الكثير ولكني سأعاود الشرح قريبا أن شاء الله لأني مهتم بمشاريع أخري أضافة لشرحي لهذا الموضوعآخر تعديل بواسطة Ram22 ، 07-12-2011 الساعة 09:32 AM
- 07-12-2011, 11:14 AM #64
بارك الله تعالى فيك استاذنا الكريم
اثابك الله تعالى على عملك هذا
وياريت اخى ان تجعل هذا الموضوع هو الموضوع الاساسى من مشاريعك وان تتحدث فيه عن كل ماقلته الان من ملفات ال dll والمضاعفات والشبكه العصبيه الى كل تلك الامور
حتى وان لم يكن هناك مهتميين الان فى هذه الفترة ولكن سينفع هذا الموضوع الاخوة فى المستقبل لانه سيكون مرجع ليهم بأمر الله تعالى
ونطلب ايضا من الادارة تثبيته ليعم الفائده على الجميع
تقبل ودى اخى الكريم ومنتظر بقيه شرحك الجميل
بارك الله تعالى فيك
- 07-12-2011, 09:47 PM #65
كيف نجعل الأكسبرت يعرف هل توجد صفقات مفتوحة علي الشارت أم لا؟
سنقوم بعمل أسكربت بسيط يبين الفكرة ونضعه بمجلد scripts ونشغله من scripts الموجودة علي يسار الشارت .
كود:#property show_confirm int start() { if(Tic(1)!=0)Alert("توجد صفقة شراء مفتوحة"); if(Tic(2)!=0)Alert("توجد صفقة بيع مفتوحة"); if(Tic(3)!=0)Alert("توجد صفقة شراء معلق مفتوحة"); if(Tic(4)!=0)Alert("توجد صفقة بيع معلق مفتوحة"); return(0); } int Tic(int Type) { int T=0; for (int i = 0; i < OrdersTotal(); i++) { OrderSelect(i, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() == Symbol()) { switch(Type) { case 1: { if (OrderType() == OP_BUY&& T< OrderTicket()) T= OrderTicket(); break; } case 2: { if (OrderType() == OP_SELL&& T< OrderTicket()) T= OrderTicket(); break; } case 3: { if (OrderType() == OP_BUYSTOP&& T< OrderTicket()) T= OrderTicket(); break; } case 4: { if (OrderType() == OP_SELLSTOP&& T< OrderTicket()) T= OrderTicket(); break; } default : { break; } } } } return (T); }
1- مرة نفتح صفقة شراء ونشغل السكربت.
2-مرة نفتح صفقة بيع ونشغل السكربت
3- ومرة شراء معلق buystop ونشغل السكربت
4-ومرة بيع معلق ونشغل السكربت
سنلاحظ أن السكربت يعطي صندوق يبين أنه توجد صفقة مفتوحة ويبين نوعها عند كل مرة والسبب أنه عندما نريد أن نجعل السكربت يتحقق من الشراء نجعل Type=1 فتذهب للحلقة switch وتتحقق من شرط الشراء عند 1 فلو وجد OrderType وهي نوع الصفقة شراء سيجعل T=OrderTicket وعندما نتحقق ونجد T لا تساوي صفر يعني توجد صفقة شراء مفتوحة وهكذا مع باقي الصفقات مع أعطاء رقم 2 للبيع و 3 للشراء المعلق BuyStop و4 للبيع المعلق SellStop.
ونستعمل الكود
كود:int Tic(int Type) { int T=0; for (int i = 0; i < OrdersTotal(); i++) { OrderSelect(i, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() == Symbol()) { switch(Type) { case 1: { if (OrderType() == OP_BUY&& T< OrderTicket()) T= OrderTicket(); break; } case 2: { if (OrderType() == OP_SELL&& T< OrderTicket()) T= OrderTicket(); break; } case 3: { if (OrderType() == OP_BUYSTOP&& T< OrderTicket()) T= OrderTicket(); break; } case 4: { if (OrderType() == OP_SELLSTOP&& T< OrderTicket()) T= OrderTicket(); break; } default : { break; } } } } return (T); }
كود:int Tic(int Type)
- 07-12-2011, 10:38 PM #66
السلام عليكم ورحمة الله
انا عندي خبرة لا باس بها بالدلفي واحاول مجاراة هذه اللغة وقد عملت اكسبرت لتقاطع الموفينجات بحيث يفتح صفقة عند التقاطع ويغلقها عند ظهور اشارة عكسية.ويفتح صفقة واحدة على العملة الى غاية انتهائها.
لكن المشكلة لما يفتح صفقة شراء مثلا فعند تحقق الهدف فانه يستمر في فتح صفقة شراء اخرى ولكن واحدة فقط وهكذا.
فكيف اجعله يكتفي بصفقة واحدة عند الشراء وينتظر اشارة البيع ليفتح صفقة واحدة فيه ايضا.
ارجو الا تتوقف عن دروسك
بارك الله فيك
- 08-12-2011, 01:36 AM #67
بارك الله تعالى فيك اخى
اكمل دروسك ونحن متابعينك
تقبل ودى
- 08-12-2011, 02:19 AM #68
السلام عليكم
أولا بارك الله فيك أخي الكريم
ثانيا الموضوع مفيد جدا جدا و يجعل لغة MQL4 تبدو سهلة .
ثالثا أنت محق فليس هناك الكثير من الذين يهتمون بتعلم لغة البرمجة و أغلب المتاجرين يعتقدون أنها معقدة وصعبة التعلم ، و لكن ليس معنى هذا أنه لا يوجد من يريد أن يتعلم فمثلا الاخ أحمد شهاب متابع و بحماس أيضا و أنا أيضا سأكون ان شاء الله من المتابعين(لم أرى الموضوع الا اليوم فقط) و ربما هناك آخرون في الظل .
أخيرا أرجوا منك أن تكمل الموضوع و لك كل الشكر و التقدير.
الهادي
- 08-12-2011, 03:19 AM #69
الحل الأسهل هو عمل مؤشر ووضعه علي الشارت يقوم بعمل ملف أسمه مثلا information ويكتب به مثلا كلمة StopBuy لو وجد صفقة شراء مفتوحة ولا يغيرها حتي يتم عمل صفقة بيع فيكتب StopSell
مكانها ويجب أن تعدل برنامج الدلفي ليقرأ الملف ويتأكد من أن كلمة StopBuy
غير مكتوبة ليفتح شراء وايضا يتأكد من أن كلمة StopSell
غير مكتوبة ليفتح البيع مثل هذا المؤشرالذي يكتب الملف بهذا المسار
C:\Program Files\ForexCompany\experts\files
كود:#property indicator_chart_window int deinit() { Comment(""); return(0); } int init() { return(0); } int start() { Comment("CheckTick"); Write(); Check(); return(0); } int Tic(int Type) { int T=0; for (int i = 0; i < OrdersTotal(); i++) { OrderSelect(i, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() == Symbol()) { switch(Type) { case 1: { if (OrderType() == OP_BUY&& T< OrderTicket()) T= OrderTicket(); break; } case 2: { if (OrderType() == OP_SELL&& T< OrderTicket()) T= OrderTicket(); break; } default : { break; } } } } return (T); } int Write(){ if(Tic(1)!=0&&Tic(2)==0){ GlobalVariableDel("Singal"); GlobalVariableSet("Singal",1); } if(Tic(2)!=0&&Tic(1)==0){ GlobalVariableDel("Singal"); GlobalVariableSet("Singal",2); } if(Tic(2)==0&&Tic(1)==0){ GlobalVariableDel("Singal"); GlobalVariableSet("Singal",0); } return (0); } void Check(){ int T; if(GlobalVariableGet("Singal")==1){ T=FileOpen("Information.txt",FILE_BIN|FILE_WRITE); if(T>0){ FileWrite(T,"StopBuy"); FileClose(T); } } if(GlobalVariableGet("Singal")==2){ T=FileOpen("Information.txt",FILE_BIN|FILE_WRITE); if(T>0){ FileWrite(T,"StopSell"); FileClose(T); } } }
نعم أن شاء الله
- 08-12-2011, 06:09 AM #70
موضوعك جميل جدا لقد قراته الان فى جلسة واحدة لانى نفسى اتعلم عمل المؤشرات والاكسبيرتات
والان انا استفدت بان عرفت اقرا بعض المعطيات ومعناها فى داخل الاكسبيرت كى افهمه
واكيد متابع معاك للتعلم اكثر
..........الله يقويك............
- 08-12-2011, 06:12 PM #71
قبل مانكمل الموضوع سأتكلم عن بعض المعلومات العامة التي ستساعد علي تجميع وتنمية الأفكار عن عمل الأكسبرتات
هل يشترط أن تكون منصة التداول هي برنامج الميتاتريدر لعمل أكسبرت ؟
عندما نعمل أكسبرت بلغة MQL4 لا نستطيع أن نعمله علي منصة تداول أخري غير الميتاتريدر ولكن يمكن عمل أكسبرت بلغات أخري مثل فجول بيسك مثلا علي منصات أخري بشرط توفر البرنامج الوسيط API . وبعض الشركات توفر هذه الميزة وبعض الشركات لا توفره ويمكن وجود مبرمجين لديهم خبرة ببرنامج التداول نفسه يعملوا هذا البرنامج الوسيط علي الشركات التي لم توفره .
وعندما نجد شركة توفر هذه الميزة فأنها تكتب بموقعها الأكواد التي سنستعملها للتعامل مع برنامج APIالوسيط
مثلا أحدي الشركات عندما ندخل لموقعها ونضغط علي API سنجد الأكواد التي سنتعامل بها مع البرنامج الوسيط بلغتين .
1- بلغة فجول بيسك.
2-بلغة PHP
وعندما نضغط علي زر SendOrder مثلا نحصل علي الأكواد التي سنعطي بها الأوامر الي البرنامج الوسيط عن طريق الفجول بيسك
مثلا
كود://The following code sends an order with lots of optional parameters. Dim api As StreamsterApi = New StreamsterApi Dim o As Order = New Order o.Instrument = "Dow Jones" o.Side = "BUY" o.Price = 8756.24 o.PriceSpecified = True o.PriceType = "LIMIT" o.ExitTarget = 8770 o.ExitTargetSpecified = True o.Desk = "Testing" o.Currency = "EUR" o.Quantity = 10 o.QuantitySpecified = True o.DurationType = "GTD" o.Duration = DateAdd("d", 1, Now()) o.DurationSpecified = True o.Text = "test order from my script" api.SendOrder(o)
- 08-12-2011, 07:10 PM #72
هناك بعض الوسطاء لديهم برامج لها لغة البرمجة الخاصة بها مثل dukascopy التي لديها منصة JForex والتي تستعمل لغة
http://www.dukascopy.com/swiss/english/forex/jforex/JAVA
و المنصة تتوفر على ما يسمى JForex Strategy Converter الذي يقوم بالتحويل اللاكسبيرتات من لغات أخرى و من بينها MQL4 الى لغة JAVA .
- 08-12-2011, 08:22 PM #73أغلاق الصفقات
لنفهم كيف يغلق الأكسبرت الصفقات سنقوم بعمل أسكربت بسيط يقوم بغلق كل الصفقات الموجودة علي الشارت ونضعه بمجلد Scripts ونشغله من كلمة Scripts الموجودة علي اليسار
كود:#property show_inputs int start() { while(Tic()!=0){ close(); } return(0); } int Tic() { int T=0; for (int i = 0; i < OrdersTotal(); i++) { OrderSelect(i, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() == Symbol()) { if ((OrderType() == OP_BUY||OrderType() == OP_SELL)&& T< OrderTicket()) T= OrderTicket(); } } return (T); } void close() { for (int t=0; t<OrdersTotal(); t++) { OrderSelect(t,SELECT_BY_POS) ; if(OrderSymbol()==Symbol()) { if( OrderType()==OP_BUY){ OrderClose(OrderTicket(),OrderLots(),Bid,6,Yellow); Sleep(500); RefreshRates(); } if( OrderType()==OP_SELL){ OrderClose(OrderTicket(),OrderLots(),Ask,6,Yellow); Sleep(500); RefreshRates(); } } } }
كود:while(Tic()!=0){ close(); }
- 08-12-2011, 08:35 PM #74
وأهم شيء أن تجرب عملي خطوة بخطوة وستجد نفسك مع الوقت قادر علي عمل أكسبرتات أصعب فأنا بالبداية لا أفهم شئ بلغة mql4 وبعد أن بدأت أجرب بالتدريج تعلمتها والحمد لله
شكرا علي هذه المعلومات وهذا ممكن طبعا مثل ماتم عمل لغة MQL4 علي برنامج الميتاتريدر وأكيد ممكن عمل برامج تحول من لغة الي أخري طبعا. مثل ماعمل برامج تحول من MQL4 الي MQL5آخر تعديل بواسطة Ram22 ، 08-12-2011 الساعة 08:38 PM
- 08-12-2011, 09:57 PM #75
لنفهم الكود بالتفصيل أكثر والجزء الذي يهمنا هو هذا الجزء
كود:if(OrderSymbol()==Symbol()) { if( OrderType()==OP_BUY){ OrderClose(OrderTicket(),OrderLots(),Bid,6,Yellow); Sleep(500); RefreshRates(); } if( OrderType()==OP_SELL){ OrderClose(OrderTicket(),OrderLots(),Ask,6,Yellow); Sleep(500); RefreshRates(); } }
كود:[LEFT]
if (OrderSymbol() == Symbol()) {
كود:if( OrderType()==OP_BUY){
ستقولوا لماذا فصلت الشراء عن البيع ويوجد شرط منفصل لكل منهم؟
والسبب أننا عندما نغلق الشراء نستعمل القيمة Bid وهي سعر البيع وعندما نغلق البيع نستعمل القيمة Ask لذلك فصلناهم
وستلاحظوا بعد أعطاء أمر الأغلاق أستعملنا
كود:Sleep(500); RefreshRates();