 | | | |  | |
04-03-2009, 02:30 AM
|
#76 (permalink)
| | رد: دورة صناعة الاكسبيرتات اقتباس:
المشاركة الأصلية كتبت بواسطة وضاح عطار
بسم الله الرحمن الرحيم السلام عليكم ورحمة الله وبركاته في هذا الدرس سنشرح المزيد من الأوامر المتعلقة بالاكسبيرتات والصفقات التجارية وكيفية التعامل معها. وبواسطة هذه الوظائف الخاصة بالصفقات نستطيع الشراء أو البيع الفوري والمعلق أو حذف الصفقات المعلقة أو الاستعلام عن الصفقات المفتوحة حاليا أو الصفقات المنفذة. كل صفقة نقوم بها سواء كانت فورية أو معلقة فإن لها رقم فريد غير متكرر على مستوى الصفقات التي تفتح من البروكر نفسه . وهو عبارة عن رقم تسلسلي لجميع الصفقات الحقيقية أو الديمو لكل الحسابات الموجودة في السيرفر الخاص بكل بروكر . مثلا أنا فتحت صفقة شراء من حسابي وأخذت الرقم 20034 وأنت أيضا لك حساب في نفس الشركة وفتحت بعدي مباشرة صفقة بيع من حسابك فهي ستأخذ الرقم 20035 . ومن خلال هذا الرقم نستطيع معرفة حجم العمل لأي شركة فوركس وذلك بمعرفة عدد الصفقات التي يتم فتحها كل يوم مثلا . فمثلا فتحت أنا صفقة أخذت الرقم 10000 وبعد ساعة فتحت صفقة أخرى فكان رقمها 100300 فهذا يعني أنه خلال هذه الساعة تم فتح 300 صفقة. ولكننا لن نعرف طبعا عدد الصفقات الحقيقية من الديمو . ولكنه رقم يعبر عن حركة الشركة بشكل عام . المهم من كل الكلام السابق فإن أهم شيء لنا علينا معرفته أن لكل صفقة رقم Ticket وهو رقم فريد لهذه الصفقة فقط . حتى الصفقة المعلقة التي نحذفها لها رقم فريد يبقى معلقا بها حتى النهاية . وجدنا في الدرس السابق كيف قمنا بعمل حلقة على كل الصفقات الحالية ومعرفة عدد الصفقات المتعلقة بالاكسبيرت فقط عن طريق ميزة الرقم السري الذي يميز الصفقات عن بعضها البعض. وكيف استطعنا أيضا إغلاق الصفقات المفتوحة أو حذف الصفقات المعلقة . واستخدمنا في ذلك تقنية بسيطة وهي عبارة عن حلقة تمر على كل الصفقات من أول صفقة حتى آخر صفقة . وفي حال وجدنا صفقة تحقق الشروط المطلوبة قمنا بعدها أو حذفها أو إغلاقها حسب نوع العمل المطلوب . لا يمكن بأي حال من الأحوال التعامل مع صفقة قبل اختيارها أولا ويتم اختيارها عن طريق الوظيفة OrderSelect . كل الأوامر المتعلقة بالصفقات تقريبا تحتاج قبل استدعائها تنفيذ الوظيفة OrderSelect . وإلا فإننا سنحصل على رسالة خطأ . لذلك يجب الانتباه جيدا أننا فعلا قمنا باختيار الصفقة المطلوبة وبعدها نستطيع عمل أي شيء على هذه الصفقة المختارة . مثلا نستطيع معرفة أي معلومة عن الصفقة المختارة مثل سعر الدخول لهذه الصفقة أو نوع الصفقة هل هي بيع أو شراء أو غيره . أو تاريخ فتح الصفقة أو ربح الصفقة الحالي وغيره من المعلومات الأخرى الهامة . بما أننا لا بد من أن نختار الصفقة من خلال OrderSelect قبل أن نقوم بأي عملية على الصفقة المختارة لذلك سنتكلم قليلا عن تقنية الاختيار هذه. لكل حساب قسمين من الصفقات . القسم الأول : هو القسم الذي يحوي على الصفقات المنفذة وغير المغلقة أو الصفقات المعلقة وغير المنفذة . وهي الصفقات التي نراها في صفحة Trade أسفل برنامج التداول . القسم الثاني : وهو القسم الذي يحوي على الصفقات المغلقة أو الصفقات المعلقة المحذوفة . وهي الصفقات التي نراها في صفحة History . في الحقيقة فإن لكل صفقة رقمين : الأول : رقم التيكيت الذي تحدثنا قبل قليل . الثاني : رقم تسلسلي في القسم الذي يتبع له وهو يبدأ من الصفر - واحد - اثنان وهكذا حتى آخر صفقة . ولكل قسم أرقام تسلسلية خاصة به . ادخل على صفقاتك الحالية فإن أول صفقة لها الرقم صفر والصفقة التي بعدها رقمها واحد وهكذا . هذا الرقم لن تراه في جدول الصفقات . بل سترى رقم التيكيت فقط . الآن حان وقت شرح الوظيفة OrderSelect لهذه الوظيفة ثلاث بارامترات : الأول : رقم الصفقة التسلسلي أو التيكيت والذي يتحدد نوعه حسب قيمة البارامتر الثاني . البارامتر الثاني : نوع الرقم هل هو تسلسلي أو تيكيت . ويأخذ قيمتين إما SELECT_BY_POS وهذا يعني أن الرقم نوعه تسلسلي. أو القيمة SELECT_BY_TICKET وهذا يعني أن الرقم نوعه تيكيت . البارامتر الثالث : نوع القسم الذي سنختار منه الصفقة هل هو الصفقات الحالية أو الهيستوري . وله قيمتان إما MODE_TRADES وهذا يعني أننا سنعمل على الصفقات الحالية. وهي القيمة الافتراضية . أو القيمة MODE_HISTORY وهذا يعني أننا سنعمل على الصفقات الهيستوري فقط . فمثلا الكود التالي يعني أنني أختار الصفقة ذات الرقم التسلسي 3 في الصفقات الحالية: كود PHP: OrderSelect(3, SELECT_BY_POS,MODE_TRADE);
كما يمكن كتابة نفس السطر بالطريقة المختصرة مع أني لا أحبذها على الشكل التالي : كود PHP: OrderSelect(3, SELECT_BY_POS);
حيث أن البارامتر الثالث له قيمة افتراضية هي MODE_TRADE ونستطيع عدم كتابته . والكود التالي يعني أنني أختار الصفقة ذات رقم التيكيت 25689 في الصفقات الحالية: كود PHP: OrderSelect(25689, SELECT_BY_TICKET,MODE_TRADE);
والكود التالي يعني أنني أختار الصفقة ذات رقم التيكيت 4567 في صفقات الهيستوري: كود PHP: OrderSelect(4567, SELECT_BY_TICKET,MODE_HISTORY);
| عزيزي وضاح عطار
لو سمحت طلب كيف احصل على رقم التيكت هذا مثلا انا عندي خمسة صفقات مفتوحة واريد
تعديل صفقة معينة كيف يمكن ذلك برمجيا لو سمحت ممكن الكود
|  | |
| |
20-05-2009, 09:36 PM
|
#78 (permalink)
| | معلومات العضو | | المتداول العربي | | رد: دورة صناعة الاكسبيرتات
السلام عليكم ورحمة الله وبركاته أخي وضاح، لقد استمتعت كثيرا وأنا أقرأ شرحك البارع في شرح هذه المادة، تقديري وحترامي لك وبارك لله لك هذه الجهود الجبارة وجعلها في سجل حسناتك ووضعها في ميزان القبول عنده، آمين يارب.
غير أني لو سمحت عندي سؤال عن كيفية كتابت الكود الخاص بالمؤشر ADX , -DI , +DI بحيث أود أن أقوم بعملية الجمع والطرح في ما بين قيمهم في نص الإكسبيرت الذي أنا بصدد كتابته بناءا على شروحاتك القيمة. ولقد أرفقت المؤشر ADXdon الذي أريد العمل به وجزاك الله عني كل خير |  | | التوقيع | | اللهم لا تلهنا بما عندك عنك **************************** اللهم صلي على سيدنا محمد النبي وأزواجه أمهات المؤمنين وذريته وآل بيته كما صليت على آل سيدنا إبراهيم في العالمين إنك حميد مجيد | |
| |
29-07-2009, 09:10 PM
|
#82 (permalink)
| | رد: دورة صناعة الاكسبيرتات
السلام عليكم
الاكسبيرت لم يحذف الاوردار المعلق عند انتهاء اليوم!!!! كود PHP: extern int Step=70;
extern int Takeprofit=35;
extern int Stoploss=37;
extern double Lots=1;
int Magicnumber=234561;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
if(Hour()==0 && Minute()<5 && MyOrdersTotal(Magicnumber)>0)
{
DeletePendingOrders(Magicnumber);
CloseOrders(Magicnumber);
}
if(Hour()==0 && Minute()>5 && MyOrdersTotal(Magicnumber)==0)
{
double DayClose=iClose(Symbol(),PERIOD_D1,1);
double BuyPrice=DayClose+Step*Point;
double BuyTP=BuyPrice+Takeprofit*Point;
double BuySL=BuyPrice-Stoploss*Point;
double SellPrice=DayClose-Step*Point;
double SellTP=SellPrice-Takeprofit*Point;
double SellSL=SellPrice+Stoploss*Point;
OrderSend(Symbol(),OP_BUYSTOP,Lots,BuyPrice,3,BuySL,BuyTP,"",Magicnumber,0,Green);
OrderSend(Symbol(),OP_SELLSTOP,Lots,SellPrice,3,SellSL,SellTP,"",Magicnumber,0,Green);
}
return(0);
}
int MyOrdersTotal(int Magic)
{
int c=0;
int total = OrdersTotal();
for (int cnt = 0 ; cnt < total ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == Magic && OrderSymbol()==Symbol())
{
c++;
}
}
return(c);
}
int DeletePendingOrders(int Magic)
{
int total = OrdersTotal()-1;
for (int cnt = total ; cnt > 0 ; cnt--)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == Magic && OrderSymbol()==Symbol() && (OrderType()!=OP_BUY || OrderType()!=OP_SELL))
{
OrderDelete(OrderTicket());
}
}
return(0);
}
int CloseOrders(int Magic)
{
int total = OrdersTotal()-1;
for (int cnt = total ; cnt > 0 ; cnt--)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == Magic && OrderSymbol()==Symbol())
{
if (OrderType()==OP_BUY)
{
OrderClose(OrderTicket(),OrderLots(),Bid,3);
}
if (OrderType()==OP_SELL)
{
OrderClose(OrderTicket(),OrderLots(),Ask,3);
}
}
}
return(0);
}
|  | |
| |
14-08-2009, 02:38 AM
|
#84 (permalink)
| | معلومات العضو | | المتداول العربي | | رد: دورة صناعة الاكسبيرتات |
الأخ وضاح شكلو مل مني كل مايروح مكان وراااااااااه
مش هسيبو
|  | | التوقيع | | قال رسول الله صلى الله عليه وسلم ( من كانت الآخرة همه جعل الله غناه في قلبه وجمع له شمله وأتته الدنيا وهي راغمة ومن كانت الدنيا همه جعل الله فقره بين عينيه وفرق عليه شمله ولم يأته من الدنيا إلا ما قدر له ) رواه الترمذي رحم الله الوافي | |
| |
08-10-2009, 02:39 PM
|
#86 (permalink)
| | معلومات العضو | | المتداول العربي | | رد: دورة صناعة الاكسبيرتات
أرجوكم .. ساعدوني جزاكم الله خير
طلبت اكسبيرت باستيراتيجية معينه .. أصبح هذا الكسبيرت المتواضع أحد احلامي
والله تعبت وأنا بحاول أصنع هذا الاكسبيرت ..
الله يخليكم ساعدوني على عمله ليعمل على زوج العملات GBPJPY
أرجو منكم أخواني مساعدتي على عمل اكسبيرت بالاستيراتيجية التالية لأستخدمها على حسابي : - أمر شراء صفقة Buy عند كل رقم صحيح بشكل مستمر ( مثلا: 141، 142، 143 .. ) - بيع الصفقة بعد ربح 100 نقطة - وإما بيعها على خسارة 500 نقطة - إعادة الأوامر تلقائياً بعد تنفيذها سواء كانت رابحة أو خاسرة (مثال: أمر شراء على 143، أخذ الربح Take profit على 144، أو وقف الخسارة stop lose على 138 ) وعمل نفس الاستراتيجية تماما ولكن بشكل معاكس ( أمر بيع sell عند كل رقم صحيح وبنفس استيراتيجية الربح والخسارة ) ============================== هل يستطيع أحد تعديل هذا الكود والله ليس لي سوى الله ثم أنتم كود: #property copyright "System"
double TakeProfit =100; //150 150 /Bien 80 92 tres bien 100
double TakeProfit2 =100;
double StopLoss2 =500;
double StopLoss =500; //250 / b100 100 100
int i=0;
double Max=1;
double A=1,b=1;
extern double Lot=0.1;
int start()
{
double ADXP,ADXC,ADXDIPP;
double ADXDIPC,ADXDIMP,ADXDIMC;
double Lots;
int cnt, ticket, total;
int li;
if(Bars<100)
{
Print("bars less than 100");
return(0);
}
Lots = Lot;
total=OrdersTotal();
if(total<2)
{
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-StopLoss*Point,Ask+TakeProfit*Point,"1er position",12,0,Green);
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+StopLoss*Point,Bid-TakeProfit*Point,"1er position",12,0,Red);
return(0);
}
for(cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL && // check for opened position
OrderSymbol()==Symbol()) // check for symbol
{
if(OrderType()==OP_BUY && OrderMagicNumber() ==12) // long position is opened
{
if((Ask-OrderOpenPrice())>=(20*Point))
{OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);
OrderSend(Symbol(),OP_BUY,2*Lots,Ask,3,Bid-StopLoss2*Point,Ask+TakeProfit2*Point,"2eme position",13,0,Green);
}
}
if(OrderType()==OP_SELL && OrderMagicNumber() ==12)
{
if ((OrderOpenPrice()-Bid)>=(20*Point))
{OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // close position
OrderSend(Symbol(),OP_SELL,2*Lots,Bid,3,Ask+StopLoss2*Point,Bid-TakeProfit2*Point,"2er position",12,0,Red);
}
}
if(OrderType()==OP_BUY && OrderMagicNumber() ==13)
{if((Ask-OrderOpenPrice())<=(10*Point))
{OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);
OrderSend(Symbol(), OP_BUYSTOP, 2*Lots, Ask + 10 * Point, 3, 0, Ask +10 + 30 * Point,"2eme position", 13, 0, Blue);
//OrderSend(Symbol(),OP_BUY,2*Lots,Ask,3,Bid-StopLoss2*Point,Ask+TakeProfit2*Point,"2eme position",13,0,Green);
}
}
if(OrderType()==OP_SELL && OrderMagicNumber() ==13)
{if((OrderOpenPrice()-Bid)<=(10*Point))
{OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet);
OrderSend(Symbol(), OP_SELLSTOP, 2*Lots, Bid - 10 * Point, 3, 0, Bid - 10 - 30 * Point, "2eme position", 13, 0, Red);
}}
}
}
return(0);
}
مرفق الاكسبيرت الذي احاول التعديل عليه دون جدوى 
البركه فيكم
|  | |
| |
11-10-2009, 02:02 AM
|
#88 (permalink)
| | معلومات العضو | | المتداول العربي | | رد: دورة صناعة الاكسبيرتات
السلام عليكم .. موضوع رائع وجميل جداااا
شرح جميل وتمنيت يكون الشرح اكثر، وتنزل من مستواك وتشرح للأخوانك الجدد في عالم السكربتات
مشكور ياوضاح علي عملك الرائع ونطلبك بدورة اكثر دقة
تقبل تحياتي |  | |
| |
12-10-2009, 02:19 AM
|
#89 (permalink)
| | معلومات العضو | | المتداول العربي | | رد: دورة صناعة الاكسبيرتات اقتباس:
المشاركة الأصلية كتبت بواسطة yousiif
أرجوكم .. ساعدوني جزاكم الله خير
طلبت اكسبيرت باستيراتيجية معينه .. أصبح هذا الكسبيرت المتواضع أحد احلامي
والله تعبت وأنا بحاول أصنع هذا الاكسبيرت ..
الله يخليكم ساعدوني على عمله ليعمل على زوج العملات GBPJPY
أرجو منكم أخواني مساعدتي على عمل اكسبيرت بالاستيراتيجية التالية لأستخدمها على حسابي : - أمر شراء صفقة Buy عند كل رقم صحيح بشكل مستمر ( مثلا: 141، 142، 143 .. ) - بيع الصفقة بعد ربح 100 نقطة - وإما بيعها على خسارة 500 نقطة - إعادة الأوامر تلقائياً بعد تنفيذها سواء كانت رابحة أو خاسرة (مثال: أمر شراء على 143، أخذ الربح Take profit على 144، أو وقف الخسارة stop lose على 138 ) وعمل نفس الاستراتيجية تماما ولكن بشكل معاكس ( أمر بيع sell عند كل رقم صحيح وبنفس استيراتيجية الربح والخسارة ) ============================== هل يستطيع أحد تعديل هذا الكود والله ليس لي سوى الله ثم أنتم كود: #property copyright "System"
double TakeProfit =100; //150 150 /Bien 80 92 tres bien 100
double TakeProfit2 =100;
double StopLoss2 =500;
double StopLoss =500; //250 / b100 100 100
int i=0;
double Max=1;
double A=1,b=1;
extern double Lot=0.1;
int start()
{
double ADXP,ADXC,ADXDIPP;
double ADXDIPC,ADXDIMP,ADXDIMC;
double Lots;
int cnt, ticket, total;
int li;
if(Bars<100)
{
Print("bars less than 100");
return(0);
}
Lots = Lot;
total=OrdersTotal();
if(total<2)
{
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-StopLoss*Point,Ask+TakeProfit*Point,"1er position",12,0,Green);
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+StopLoss*Point,Bid-TakeProfit*Point,"1er position",12,0,Red);
return(0);
}
for(cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL && // check for opened position
OrderSymbol()==Symbol()) // check for symbol
{
if(OrderType()==OP_BUY && OrderMagicNumber() ==12) // long position is opened
{
if((Ask-OrderOpenPrice())>=(20*Point))
{OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);
OrderSend(Symbol(),OP_BUY,2*Lots,Ask,3,Bid-StopLoss2*Point,Ask+TakeProfit2*Point,"2eme position",13,0,Green);
}
}
if(OrderType()==OP_SELL && OrderMagicNumber() ==12)
{
if ((OrderOpenPrice()-Bid)>=(20*Point))
{OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // close position
OrderSend(Symbol(),OP_SELL,2*Lots,Bid,3,Ask+StopLoss2*Point,Bid-TakeProfit2*Point,"2er position",12,0,Red);
}
}
if(OrderType()==OP_BUY && OrderMagicNumber() ==13)
{if((Ask-OrderOpenPrice())<=(10*Point))
{OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);
OrderSend(Symbol(), OP_BUYSTOP, 2*Lots, Ask + 10 * Point, 3, 0, Ask +10 + 30 * Point,"2eme position", 13, 0, Blue);
//OrderSend(Symbol(),OP_BUY,2*Lots,Ask,3,Bid-StopLoss2*Point,Ask+TakeProfit2*Point,"2eme position",13,0,Green);
}
}
if(OrderType()==OP_SELL && OrderMagicNumber() ==13)
{if((OrderOpenPrice()-Bid)<=(10*Point))
{OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet);
OrderSend(Symbol(), OP_SELLSTOP, 2*Lots, Bid - 10 * Point, 3, 0, Bid - 10 - 30 * Point, "2eme position", 13, 0, Red);
}}
}
}
return(0);
}
مرفق الاكسبيرت الذي احاول التعديل عليه دون جدوى 
البركه فيكم | لا زلت في انتظار مساعدة أحد الاخوة المبرمجين جزاهم الله خيرا
|  | |
| | |