شكرا جزيلا أخي يوسف .. أنا فعلت ذلك و المشكله كما هي .. لكن دعني أجرب مره أخرى و أرد إن شاء الله ... جزاك الله خيرا أخي الفاضل .
Printable View
السلام عليكم ورحمة الله وبركاته
تحية طيبة إخواني
سؤال برمجي بسيط
أريد دالة إغلاق الهيدج OrderCloseBy بطريقة بسيطة مع التعديل على الاكسبيرت المرفق فضلا لا أمرا
وجزاكم الله خيرا :eh_s(7):
بعد إذنك يا أستاذ أسامة
دلوقتي لو أنا عايز الإكسبيرت يبحث عن تحقق شرط معين في أول يوم في الإسبوع ( الإثنين ) والبحث يكون على شارت الـ 5 دقائق
يعني عايزه يبحث إذا كان هناك قمة وقاع متتالين والفرق بينهم 100 نقطة على شارت الـ 5 دقائق في أول يوم في الإسبوع
ده هيكون إزاي :)
أضفت الشرط
لدالة حساب اللوتكود PHP:
if(newLot>MarketInfo(Symbol(),MODE_MAXLOT)) newLot=MarketInfo(Symbol(),MODE_MAXLOT);
فأصبح الإكسبيرت تعلق الأوامر و لكن أحيانا لا يعلقها أيضا رغم أنه قد علقها قبل ذلك لنفس اللوت في الباك تيست .كود PHP:
double new(){
double newLot;
double A=orderscnt(OP_BUY)+orderscnt(OP_SELL);
if(A==1)newLot=Lot2;
if(A==2)newLot=Lot3;
if(A==3)newLot=Lot4;
if(A==4)newLot=Lot5;
if(A==5)newLot=Lot6;
if(A==6)newLot=Lot7;
if(A==7)newLot=Lot8;
if(A==8)newLot=Lot9;
if(A==9)newLot=Lot10;
if(A==10)newLot=Lot11;
if(A==11)newLot=Lot12;
if(A==12)newLot=Lot13;
if(A==13)newLot=Lot14;
if(A==14)newLot=Lot15;
if(newLot>MarketInfo(Symbol(),MODE_MAXLOT)) newLot=MarketInfo(Symbol(),MODE_MAXLOT);
return(newLot);
}
:no3::no3::no3:
try.mq4
دالة OrderCloseBy لو مثلا عندك صفقتين مفتوحتين بيع وشراء البيع بحجم 1 لوت والشراء بحجم 2 لوت
فهذه الداله ستقوم بإغلاق الصفقتين البيع والشراء بنفس نسب حجم اللوت فتغلق البيع بحجم 1 لوت وتغلق جزء من صفقة الشراء 1 لوت ويتبقى الجزء الآخر من الشراء بحجم 1 لوت
هذا بإختصار عمل الداله
طريقة كتابتها
حيث ticket هو رقم التيكيت للصفقه الأولى ticket2 هو رقم التيكيت للصفقه الثانيهكود PHP:
OrderCloseBy(ticket,ticket2,Red);
ههههههههههه
أيوة أنا صحيح بقالي فترة بعيد عن البرمجة بس مش للدرجة دي يا أستاذنا :)
--------------------------------
أنا سؤالي لو وضعت الإكسبيرت على الشارت أي يوم في الإسبوع عايزة يفحص إذا تحقق الشرط اول يوم في الإسبوع
والشرط هو أن يكون تكون قمة وقاع متتالين والمسافة بينهم 100 نقطة ( على شارت الـ 5 دقايق ) أول يوم في الإسبوع
وإستخراج القمة والقاع من الزجزاج
ده مثال سريع كده بس وقفت من بعد إستخراج أعداد القمم والقيعان وإبتديت احس إني بخرف
فايدة دالة الزجزاج إني كنت عايز أعرف كام عدد القمم والقيعان بحيث أستخدم الناتج في حلقة أفحص بيهاكود PHP:
int firstcandle5shift,lastcandle5shift;
int start()
{
//----
int WeekStart=iTime("GBPUSD",PERIOD_W1,0);
int Candletuesday=iTime("GBPUSD",PERIOD_W1,iBarShift( "GBPUSD", PERIOD_D1, WeekStart)-2);
firstcandle5shift=iBarShift( "GBPUSD", PERIOD_M5, WeekStart);
lastcandle5shift=iBarShift( "GBPUSD", PERIOD_M5, Candletuesday);
return(0);
}
//+------------------------------------------------------------------+
int ZigZagCount(){
int N;
for(int i=firstcandle5shift;i<lastcandle5shift;i++){
double zz=iCustom("GBPUSD",5,"ZigZag",12,5,3,0,i);
if(zz!=0){
if(zz==iLow("GBPUSD",5,i)|| zz==iHigh("GBPUSD",5,i)){
N++;
}
}
return(N);
}
}
مالحقتش اعدلها في المشاركةكود PHP:
int Candletuesday=iTime("GBPUSD",PERIOD_D1,iBarShift( "GBPUSD", PERIOD_D1, WeekStart)-2);
----------------------------
ملحوظة :
بالنسبة لـ -2 في دي هتأثر في الناتج لغاية إغلاق يوم الإثنين ( بس مش مشكلة لإني سأضع شرط بحيث يكون العمل بالإكسبيرت يبدأ من يوم الثلاثاء )
تفضل استاذنا الغالي هكذا ارى الحل والله اعلم لم أجربه بعد:
كود PHP:
bool check()
{
bool last=false;
for(int i =0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && Array_MagicNumbers[i]==OrderMagicNumber())
{
last = true;
}
}
}
return(last);
}
جزاك الله خيرا أستاذي العزيز :)
قمت بتعديل دالتي اغلاق البيع والشراء ِCloseOrder1&2 باستبدالها بدالة إغلاق الهيدج Closeby
لا يوجد أخطاء ولكن لم تعمل بالباكتيستكود PHP:
void CloseBy()
{
int Ticket_Buy=OrderTicket();
int Ticket_Sell=OrderTicket();
for(int i=1; i<=OrdersTotal(); i++)
{
if (OrderSelect(i-1,SELECT_BY_POS)==true)
{
bool ret = OrderCloseBy(Ticket_Buy,Ticket_Sell,Red);
if (ret == false)
Print("OrderClose() error - ", ErrorDescription(GetLastError()));
}
}
}
بالمرفقات الاكسبيرتين قبل التعديل وبعد التعديل
أرجو التصحيح أستاذي الغالي :eh_s(7):
أيضا الفكرة الأساسية هي كيف يمكن عمل دالة closeby بعد تحقق takeprofit في أحد طرفي الهيدج ؟
سؤال اخي الحبيب اسامة
هل يوجد اوامر برمجية لتغيير لون خلفية الشارت والوان الشموع
الظاهر إني أنا فهمت السؤال خطأ :asvc:
بالنسبه لتكملة الكود ستأخذ كل قمة متكونة وتقارنها بالقاع السابقه أو التاليه
مثال
كود PHP:
double ZigZag1,ZigZag2;
int ZigZag()
{
int N;
for(int i=firstcandle5shift;i<lastcandle5shift;i++)
{
double zz=iCustom("GBPUSD",5,"ZigZag",12,5,3,0,i);
if(zz!=0)
{
for(int j=i+1;j<lastcandle5shift;j++)
{
double zz2=iCustom("GBPUSD",5,"ZigZag",12,5,3,0,j);
if(zz2!=0)
{
if(MathAbs(zz-zz2)==100*Point)
{
// the difference is 100 point
ZigZag1=zz;
ZigZag2=zz2;
return(0);
}
break;
}
}
}
}
}
لديك جزء بسيط فقط خطأ
أنت المفروض أنك ستقارن بين الماجيك نمبر للصفقه المحدده مع جميع الماجيك نمبر المخزن في المصفوفه فيجب أن تضع حلقه للمصفوفه
مثال
كود PHP:
bool check()
{
bool last=false;
for(int i =0;i<OrdersTotal();i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
double Magic=OrderMagicNumber();
{
if(OrderSymbol()==Symbol())
{
for(int i=0;i<ArraySize(Array_MagicNumber);i++)
{
if(Array_MagicNumber[i]==Magic)
{
last = true;
break;
}
}
}
}
}
return(last);
}
هل تقصد إغلاق الصفقه المفتوحه عندما تغلق الصفقه الهيدج لها على الهدف
في هذه الحاله لن تستخدم OrderCloseBy لأن الصفقه الهيدج أغلقت أساسا لكن في الداله OrderCloseBy تستخدم لإغلاق صفقتين متعاكستين
بالنسبه لفكرتك فيمكنك جعل الكومنت لنفس الأمرين الهيدج واحد ثم تقوم بعمل داله لمعرفة الصفقات المفتوحه إذا كان المفتوحه صفقه واحده فهذا يعني أن أحد الصفقتين أغلقت فتغلق الهيدج الآخر