اريد اعمل اكسبيرت وهو
فتح اما buy limit او sell limit على بعد مثلا 10 نقاط من افتتاح اليوم
او
فتح اما buy stop او sell stop على بعد مثلا 20 نقاط من افتتاح اليوم
بهدف مثلا 50 نقطه والستوب لوز 80
وجزاكم الله الجنه
Printable View
اريد اعمل اكسبيرت وهو
فتح اما buy limit او sell limit على بعد مثلا 10 نقاط من افتتاح اليوم
او
فتح اما buy stop او sell stop على بعد مثلا 20 نقاط من افتتاح اليوم
بهدف مثلا 50 نقطه والستوب لوز 80
وجزاكم الله الجنه
الف شكر اخي مستر لكن هذا ليس كماطلبت اوان هناك اخطاء حيث انه يقوم بالشراء مباشره
حيث وانا اريد اوامر معلقه
يمكن تعديلي هذا الاكسبيرت وتعطيني الخطاء حيث اريده ان يقوم فقط بفتح صفقتين buy limit و sell limit على بعد 10 نقاط من افتتاح الاسبوع بهدف 50 ووقف 100 وان تغلق الصفقات مع نهايه الاسبوع
//+------------------------------------------------------------------+
//| alnaser.mq4 |
//| Copyright © 2011, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
extern int Step=10;
extern int Takeprofit=50;
extern int Stoploss=100;
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 DayOfWeek=iOpen(Symbol(),PERIOD_W1,1);
double BuyPrice=DayOfWeek-Step*Point;
double BuyTP=BuyPrice+Takeprofit*Point;
double BuySL=BuyPrice-Stoploss*Point;
double SellPrice=DayOfWeek+Step*Point;
double SellTP=SellPrice-Takeprofit*Point;
double SellSL=SellPrice+Stoploss*Point;
OrderSend(Symbol(),OP_BUYLIMIT,Lots,BuyPrice,3,Buy SL,BuyTP,"",Magicnumber,0,Green);
OrderSend(Symbol(),OP_SELLLIMIT,Lots,SellPrice,3,S ellSL,SellTP,"",Magicnumber,0,Red);
}
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);
}
//+------------------------------------------------------------------+
أخي الكريم حسب معطيات الإكسبيرت فإنه لا يفتح غير أوامر معلقة BUYLIMIT && SELLLIMITاقتباس:
الف شكر اخي مستر لكن هذا ليس كماطلبت اوان هناك اخطاء حيث انه يقوم بالشراء مباشره
حيث وانا اريد اوامر معلقه
فبالتالي لا يفتح صفقات ماركت برايساقتباس:
OrderSend(Symbol(),OP_BUYLIMIT,Lots,BuyPrice,3,Buy SL,BuyTP,"",Magicnumber,0,Green);
OrderSend(Symbol(),OP_SELLLIMIT,Lots,SellPrice,3,S ellSL,SellTP,"",Magicnumber,0,Red);
أتوقع أن سيبرد الزوج اللي بتستخدمه عالي شوي ( 10 نقاط أوأكثر ) أو سريع الحركة ...... فيتم فتح صفقة معلقة و سرعان ما يتم تفعيل الصفقة ........ حاول تغير عدد النقاط أو أستخدم زوج قليل السيبرد ...... عل و عسى
اقتباس:
extern int Step=10;
كود PHP:
//+------------------------------------------------------------------+
//| alnaser.mq4 |
//| Copyright © 2008, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
extern int Step=20;
extern int Takeprofit=50;
extern int Stoploss=50;
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(DayOfWeek()==Monday && Hour()==0 && Minute()<5 && MyOrdersTotal(Magicnumber)>0)
{
DeletePendingOrders(Magicnumber);
CloseOrders(Magicnumber);
}
if(DayOfWeek()==Monday && Hour()==0 && Minute()>5 && MyOrdersTotal(Magicnumber)==0)
{
double WeekOpen=iOpen(Symbol(),PERIOD_W1,0);
double BuyPrice=WeekOpen+Step*Point;
double BuyTP=BuyPrice+Takeprofit*Point;
double BuySL=BuyPrice-Stoploss*Point;
double SellPrice=WeekOpen-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,Red);
}
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);
}
//+------------------------------------------------------------------+
أخي العزيز أعتبر نفسك تكلم الإكسبيرت , حسب المعطيات إنت بتقول للإكسبيرت أفتح عملية شراء معلق و بيع معلق بدون شروط .... فحيفضل يحطلك أوامر كتيرة دون توقف ...... فما عليك غير إنك تحطله شرط أو تقوله إزا كان عدد صفقات الشراء المعلقة أقل من 0 أفتح عملية شراء معلقة ... فيفتح لك عملية شراء معلقة و الآن أصبح عدد الصفقات المعلقة أكثر 0 فلا يفتح عملية أخرى حسب الشرط اللي حطيته إنت ......... و لكن عندما تتفعل الصفقة المعلقة يصبح عدد الصفقات المعلقة بعد التفعيل 0 و هنا سوف يضع الإكسبيرت عملية شراء معلقة مرة أخرى و أكيد إنت عارف السبب و أبغاك إنت تشوف الشرط المناسب لحجم الإكسبيرت من وضع صفقة معلقة أخرى بعد التفعيلاقتباس:
يمكن تعديلي هذا الاكسبيرت وتعطيني الخطاء حيث اريده ان يقوم فقط بفتح صفقتين فقط buy stop و sell stop على بعد 20 نقاط من افتتاح الاسبوع بهدف 50 ووقف 50 وان تغلق الصفقتين مع نهايه الاسبوع ان لم تتجقق
و ما تنسى تعرف عدد الصفقات المعلقة بنفس طريقة تعريف عدد الصفقات ( المعلقة و المفعلة )
سامحني كثرت عليك لكني شفت إنك تعرف لمبادئ صنع الإكسبيرت فأتوقع هذا مفيد لكاقتباس:
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);
}
تحيتي
ماقصرت اخي مشكور
هل تعرف ماهو الكود لغلق جميع الصفقات المعلقه والمفتوحه مع اغلاق سعر الجمعه وليس عند وقت محدد من الجمعه لانه احيانا يغلق السوق قبل الساعه 22
اريد غير هذا الكود
وكمان الكود المسؤل عن فتح صفقات معلقه سواء limit او stop بنفس الوقت ولكن تكون بفارق نقاط مختلفهكود PHP:
if(DayOfWeek()==5 && Hour()==22 && Minute()==45 && MyOrdersTotal(Magicnumber)>0)
{
DeletePendingOrders(Magicnumber);
CloseOrders(Magicnumber);
}
لا أعتقد أخي بوجود كود يتعرف على وقت إغلاق السوق ليستعان به , لكن الكود المرفق ممتاز جدا , ماعليك سوى سؤال الدعم الفني عن وقت إغلاق السوق عندهم و تدخله على الإكسبيرتاقتباس:
هل تعرف ماهو الكود لغلق جميع الصفقات المعلقه والمفتوحه مع اغلاق سعر الجمعه وليس عند وقت محدد من الجمعه لانه احيانا يغلق السوق قبل الساعه 22
اقتباس:
وكمان الكود المسؤل عن فتح صفقات معلقه سواء limit او stop بنفس الوقت ولكن تكون بفارق نقاط مختلفه
ما عليك سوى إنك تغير OP_BUYSTOP أو OP_BUYLIMIT أو OP_BUYكود PHP:
OrderSend(Symbol(),OP_BUYSTOP,Lots,BuyPrice,3,BuySL,BuyTP,"",Magicnumber,0,Green);
بس ما تنسى تحطله شروط لفتح الصفقات
زي ماقلت للإكسبيرت قبل كده إزا كان اليوم ==5 و الساععة == 22 و ... و ..... أغلق الصفقات
و دحين قله إزا ..... إزا ....... أفتح صفقات
بالتوفيق يا رب
الف شكر اخي
لكن هناك بعض المشاكل هو انه رغم تحقق الشروط الاانه احيانا يضع اوامر معلقه واحيانا لايضع اعتقد ان المشكله من السريفر لكني استخدمت طريقة إجبار السيرفر على فتح الصفقة لكن
دون فائدههل يمكن ان اجعل الاكسبيرت يفتح مع افتتاح السوق وليس عند الساعه 0 لانه احيانا يفتح متاخرا مثلا عند 1:20 فلا يستطيع الاكسبيرت ان يعمل اوامر معلقه لانه مبرمج فقط عندالساعه 0كود PHP:
gT=0;
while(gT<=0)
{
Sleep(1000);
gT=OrderSend(Symbol(),OP_SELLSTOP,Lots,sl,3,sl+StopLoss*Point,sl-TakeProfit * Point ,"" , Magic , 0 , Green);
Sleep(1000);
}
الشي الاخر عملت تنزيل بيانات العمله السابقه لشارت الدقيقه لكني اجد بعض الشموع غير موجوده رغم اني مسحت الهيستوري السابقه ونزلتها من جديد لكن دون فائده
اين اجد هذه البيانات كامله؟