المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : الموضوع المخصص للأسئلة البرمجية mql4



الصفحات : 1 2 3 4 5 [6] 7 8 9 10 11 12 13 14 15

Abdounour
08-05-2018, 03:34 PM
السلام عليكم

kira-h
08-05-2018, 05:35 PM
السلام عليكم
وعليكم السلام

bahoma31
08-05-2018, 08:21 PM
السلام عليكم أستاذ حسن

لقد برمجمت اكسبرت يقوم بعمل التالي

يتم تحديد مستوى معين كل 50 نقطة على سبيل المثال هكذا 1.0050 / 1.01 / 1.0150 / 1.02
وهكذا
ويتم تحديد موفونج اعطيته قيمة 504

الاستراتيجية هي كالآتي
debut== المستوى الذي أشرت عليه
defrent==0.0050 اي 50 نقطة




if((Open[2]<debut && Close[1]>debut ||Open[2]>debut && Close[1]<debut) && time!=Time[0] && DoubleToStr(MathAbs(Bid-HighestPrice_under(OP_BUY)),4)>defrent && DoubleToStr(MathAbs(Bid-LowestPrice_under(OP_BUY)),4)>defrent/* && (Orderscnt(OP_BUY)<3 && Bid >UP2) || Orderscnt(OP_BUY)>=0 */&& (Bid>mouving||(Orderscnt(OP_BUY)>0 && Bid<mouving)) && Ask!=LastOrderCurrent("OpenPrice",OP_BUY) /* && Bid>currentmovingslow*/)buyOrder();
if((Open[2]>debut && Close[1]<debut || Open[2]<debut && Close[1]>debut)&& time!=Time[0] && (MathAbs(LowestPrice_under(OP_SELL)-Bid)>defrent && MathAbs(Bid-HighestPrice_under(OP_SELL))>defrent) /*&& /*(Orderscnt(OP_SELL)<3 && Bid <DOWN2) ||Orderscnt(OP_SELL)>=0 */&& (Bid<mouving || (Orderscnt(OP_SELL)>0&&Bid>mouving)) && Bid!=LastOrderCurrent("OpenPrice",OP_SELL) /*&& Bid<currentmovingslow*/)SellOrder();




المشكلة لما أشغله على الديمو عند تحقق الشروط في بعض الازواج يفتح صفقتين في نفس السعر مرة واحدة

اريد من فضلك عند تحقق الشروط يفتح صفقة واحدة

واذا تحققت الشروط وكانت اقرب صفقة الى السعر اقل من 50 نقطة لا يفتحها

اذا كانت اكثر من 50 نقطة يفتح عند تحقق الشروط ولك مني جزيل الشكر

Tarek987
09-05-2018, 09:53 PM
شكرااااااااااااااااااااااااااااااااااااااا

samizhraldeen
10-05-2018, 12:14 AM
بما يخص مؤشر الفوليوم

ماهو كوده لانني لم اجده في المنتدى

وهل ضروري كتابته مرتين مثل الباربوليك

ام مرة واحدة تكفي مثل الارسي



كود الفوليوم كالتالي :
كود:
double v1=iVolume(Symbol(),0,1),
v2=iVolume(Symbol(),0,2);


if(v1>v2)//بار اخضر
if(v1<v2)//بار أحمر

السلام عليكم
اخي كيرا كيف يمكنني قول اذا البار شمعة 1 اخضر وبار الشمعة 2 اخضر ايضا بيع
واذا بار الشمعة 1 اخضر وبار الشمعة 2 احمر شراء

kira-h
10-05-2018, 05:26 PM
شكرااااااااااااااااااااااااااااااااااااااا
العفو أخي

kira-h
10-05-2018, 05:31 PM
السلام عليكم
اخي كيرا كيف يمكنني قول اذا البار شمعة 1 اخضر وبار الشمعة 2 اخضر ايضا بيع
واذا بار الشمعة 1 اخضر وبار الشمعة 2 احمر شراء

وعليكم السلام
بسيطة


double v1=iVolume(Symbol(),0,1),
v2=iVolume(Symbol(),0,2),
v3=iVolume(Symbol(),0,3);


if(v1>v2&&v2>v3)//بار 1 اخضر و بار 2 اخضر
if(v1>v2&&v2<v3)//بار 1 اخضر و بار 2 احمر

abOmar
11-05-2018, 06:30 PM
kira-h (https://www.fxprg.com/vb/member.php?u=120435) اخى
ممكن تشرح باسلوبك swith وما يترتب منهم من case و deflut

bahoma31
12-05-2018, 02:29 PM
double minm=0.8,maxi=1.5,espace=defrent*Point;

while(minm<=maxi)
{
minm+=espace;
string name="my_first";double pr1=minm;color Color=clrBeige;int style=STYLE_DASH;


if(ObjectFind(name)!=0)
{
ObjectCreate(name,OBJ_HLINE,0,0,pr1);
ObjectSet(name,OBJPROP_COLOR,Color);
ObjectSet(name,OBJPROP_STYLE,style);
}
else
{
if(ObjectGet(name,OBJPROP_PRICE1)!=pr1)
{
ObjectDelete(name);
}
}


Print(minm);

}




السلام عليكم أخي حسن كيف أعمل move للخط HLINE على حسب While

Abdounour
12-05-2018, 06:59 PM
السلام عليكم
استاذ كيرا
لقد وضعت امر ايقاف عمل الاكسبرت هذا continion trades
هو يضهر في الاعدادات لاكن لا يتوقف بل يواصل العمل مع انه false
ممكن تشوق الخطا اين
وشكرا

kira-h
12-05-2018, 07:44 PM
السلام عليكم
استاذ كيرا
لقد وضعت امر ايقاف عمل الاكسبرت هذا continion trades
هو يضهر في الاعدادات لاكن لا يتوقف بل يواصل العمل مع انه false
ممكن تشوق الخطا اين
وشكرا
وعليكم السلام
كتابة الاعدادات غير كاف يجب ربطها بالشروط التي سيعمل عليه
مثال :

if(!ContinueTrades&&StopEA==true)return;

وغيرها من الأمور

مرفق الاكسبيرت راجعه جيدا

Abdounour
12-05-2018, 08:08 PM
بارك الله فيك استاذ على المساعدة والشرح
بعد المراجعة اكتشفت الامر بانني لم اضع الدالة الخاصة بالامر
شكرا ورمضان مبارك

kira-h
13-05-2018, 12:18 AM
kira-h (https://www.fxprg.com/vb/member.php?u=120435) اخى
ممكن تشرح باسلوبك swith وما يترتب منهم من case و deflut


شرط التوزيع switch
تستخدم في حالة تعدد القيم لمتغير واحد فكل قيمة لها تنفيذ برمجي محدد
مثال :


switch(x)
{
case 'A':
Print("CASE A");
break;

case 'B':
case 'C':
Print("CASE B or C");
break;

default;
Print("NOT A, B or C");
}


تبدأ الجملة بالكلمة المحجوزة switch لتوزع أوامر التنفيذ لقيم المتغير x المختلفة.
وتأتي الأوامر بين اللامتين { }
الجملة switch تربط المتغير x بجميع القيم الداخلة للبرنامج وتتعامل معها على هذا النحو:
في حالة x==A سيكون الناتج case A وينفذ break لكسر أو انهاء الحلقة
وفي حالة x==B أو x==C سيكون الناتج case B or case C وذلك لعدم وجود break بالحالة B
في حالة !==x أي ان x لا تتطابق مع أي من القيم السابقة وسيكون الناتج الافتراضي (default) الذي هو Not case A, case B or case C

kira-h
13-05-2018, 12:20 AM
بارك الله فيك استاذ على المساعدة والشرح
بعد المراجعة اكتشفت الامر بانني لم اضع الدالة الخاصة بالامر
شكرا ورمضان مبارك
كل عام وأنتم بخير

sabil
14-05-2018, 10:42 PM
لو معايا مؤشر اسهم
وعايز اقول الشمعة رقم 2 لا تحوي اي اسهم والشمعة رقم 1 تحتها او فوقها سهم
تبقى ازاي؟

kira-h
14-05-2018, 11:06 PM
لو معايا مؤشر اسهم
وعايز اقول الشمعة رقم 2 لا تحوي اي اسهم والشمعة رقم 1 تحتها او فوقها سهم
تبقى ازاي؟
السلام عليكم
راجع المشاركة التالية :
https://www.fxprg.com/vb/showthread.php?t=31457&page=19&p=874388&viewfull=1#post874388

Tarek987
14-05-2018, 11:55 PM
السلام عليكم اخواني الكرام
كيف بدي اعمل دالة تدلني على نوع اخر صفقة اذا كانت صفقة شراء او اذا كانت صفقة بيع ؟
الرجاء الملاحظة انه حصرا اريد معرفة اخر صفقة مفعلة فقط، مش كل الصفقات المفعلة
.....
بحيث استطيع استخدام هذه الدالة بشروط الدخول على الصفقات المستقبلية,
مثلا: شرط من شروط الشراء انه تكون اخر صفقة مفعلة هي بيع

جعل الله بميزان حسناته من يساعدني على حل هذه المعضلة . صرلي اسبوعين عم اجرب و ما عم تزبط معي... ريحني الله يريحك.

Ahmed
15-05-2018, 12:09 AM
السلام عليكم اخي حسن
لدي مؤشر خارجي
اريد عمل مقارنة بين قيمة سعره وسعر اي موفينج افرج
لكن عند عرض قيم المؤشر على الشارت الاحظ ان له قيمتين ثابتتين
فكيف اقارن بين الاسعار للمؤشر واي مؤشر اخر
7284

sabil
15-05-2018, 03:32 AM
السلام عليكم
راجع المشاركة التالية :
https://www.fxprg.com/vb/showthread.php?t=31457&page=19&p=874388&viewfull=1#post874388

تمام
طيب بص انا عايز اقول شراء عند ظهور اول سهم اخضر بعد اخر سهم احمر
وبيع عند ظهور سهم احمر بعد اخر سهم اخضر

فأنا عملت الاتي ولم يفتح الاكسبرت صفقات


int ArrowSignal1()
{
for(int i=1;i<=200;i++)
{
double arrow_up=iCustom(Symbol(),0,"15 min ich.ind",0,i);
double arrow_dn=iCustom(Symbol(),0,"15 min ich.ind",1,i);

if(arrow_up!=EMPTY_VALUE)return(1);
if(arrow_dn!=EMPTY_VALUE)return(-1);
}
return(0);
}

int ArrowSignal2()
{
for(int i=1;i<=200;i++)
{
double arrow_up=iCustom(Symbol(),0,"15 min ich.ind",0,i+1);
double arrow_dn=iCustom(Symbol(),0,"15 min ich.ind",1,i+1);

if(arrow_up!=EMPTY_VALUE)return(1);
if(arrow_dn!=EMPTY_VALUE)return(-1);
}
return(0);
}

وبالنسبة لشروط الشراء

ArrowSignal2()==-1&&ArrowSignal1()==1


والبيع كالاتي

ArrowSignal2()==1&&ArrowSignal1()==-1

ارجو تصحيح الاخطاء ان وجد لان الاكسبرت لا يفتح صفقات

kira-h
15-05-2018, 05:54 PM
السلام عليكم اخواني الكرام
كيف بدي اعمل دالة تدلني على نوع اخر صفقة اذا كانت صفقة شراء او اذا كانت صفقة بيع ؟
الرجاء الملاحظة انه حصرا اريد معرفة اخر صفقة مفعلة فقط، مش كل الصفقات المفعلة
.....
بحيث استطيع استخدام هذه الدالة بشروط الدخول على الصفقات المستقبلية,
مثلا: شرط من شروط الشراء انه تكون اخر صفقة مفعلة هي بيع

جعل الله بميزان حسناته من يساعدني على حل هذه المعضلة . صرلي اسبوعين عم اجرب و ما عم تزبط معي... ريحني الله يريحك.

وعليكم السلام
ستقوم بعمل دالة لمعرفة نوع آخر صفقة مفعلة خارج الدوال الرئيسية كالتالي:


int LastOrderType()
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo)
{
return(OrderType());
}
}
return(0);
}


ثم تكون الشروط مثلا :

if(LastOrderType()==OP_BUY)//إذا كانت آخر صفقة مفعلة شراء

kira-h
15-05-2018, 06:07 PM
السلام عليكم اخي حسن
لدي مؤشر خارجي
اريد عمل مقارنة بين قيمة سعره وسعر اي موفينج افرج
لكن عند عرض قيم المؤشر على الشارت الاحظ ان له قيمتين ثابتتين
فكيف اقارن بين الاسعار للمؤشر واي مؤشر اخر

وعليكم السلام
المؤشر يعطي قيمة إذا كان يخالف 2147483647 أي يخالف empty_value
وبالتالي اذا تريد تحقق شرط الموفينج مقارنة بخطوط المؤشر، فيكفي مقارنته مع قيمة الخط الثالث الغير ملون (ضع له لون معين لتتضح لك الصورة) فالشروط كالتالي :


double t0=iCustom(Symbol(),0,"THV4 Coral T@H",0,1),
t1=iCustom(Symbol(),0,"THV4 Coral T@H",1,1),
t2=iCustom(Symbol(),0,"THV4 Coral T@H",2,1),
t3=iCustom(Symbol(),0,"THV4 Coral T@H",3,1);
ma=iMA(Symbol(),0,14,0,0,0,1);

if(t3!=EMPTY_VALUE&&ma>t3)// UP Signal

Ahmed
15-05-2018, 06:32 PM
بارك الله فيك اخي حسن

sabil
16-05-2018, 04:03 AM
تمام
طيب بص انا عايز اقول شراء عند ظهور اول سهم اخضر بعد اخر سهم احمر
وبيع عند ظهور سهم احمر بعد اخر سهم اخضر

فأنا عملت الاتي ولم يفتح الاكسبرت صفقات


int ArrowSignal1()
{
for(int i=1;i<=200;i++)
{
double arrow_up=iCustom(Symbol(),0,"15 min ich.ind",0,i);
double arrow_dn=iCustom(Symbol(),0,"15 min ich.ind",1,i);

if(arrow_up!=EMPTY_VALUE)return(1);
if(arrow_dn!=EMPTY_VALUE)return(-1);
}
return(0);
}

int ArrowSignal2()
{
for(int i=1;i<=200;i++)
{
double arrow_up=iCustom(Symbol(),0,"15 min ich.ind",0,i+1);
double arrow_dn=iCustom(Symbol(),0,"15 min ich.ind",1,i+1);

if(arrow_up!=EMPTY_VALUE)return(1);
if(arrow_dn!=EMPTY_VALUE)return(-1);
}
return(0);
}

وبالنسبة لشروط الشراء

ArrowSignal2()==-1&&ArrowSignal1()==1


والبيع كالاتي

ArrowSignal2()==1&&ArrowSignal1()==-1

ارجو تصحيح الاخطاء ان وجد لان الاكسبرت لا يفتح صفقات

متنساش ياريس
مستنيك من امبارح

Tarek987
16-05-2018, 10:38 AM
نشمي يا حسن,, كثر الله من أمثالك. شكرا كتير

Waddah
16-05-2018, 03:31 PM
السلام عليكم أستاذ
المضاعفات التالية تتم بضرب اللوت ب 1.4 ثم تقريبه بحيث تكون النتيجة : 0.01 - 0.01- 0.02- 0.03- 0.05-0.08-0.11-0.15-0.21
كيف أستطيع الإحتفاظ بقيمة اللوت المضاعف قبل التقريب ؟ لأنه 0.01*1.4 ستعطي 0.014 وبعد التقريب سيكون 0.01 لكن المضاعفة الثانية هي نتيجة ضرب 0.014*1.4 = 0.0169 وتعطي لوت 0.01 - المضاعفة الثالثة هي 0.0169*1.4 = 0.0236

مع جزيل الشكر

kira-h
16-05-2018, 10:47 PM
تمام
طيب بص انا عايز اقول شراء عند ظهور اول سهم اخضر بعد اخر سهم احمر
وبيع عند ظهور سهم احمر بعد اخر سهم اخضر

فأنا عملت الاتي ولم يفتح الاكسبرت صفقات


int ArrowSignal1()
{
for(int i=1;i<=200;i++)
{
double arrow_up=iCustom(Symbol(),0,"15 min ich.ind",0,i);
double arrow_dn=iCustom(Symbol(),0,"15 min ich.ind",1,i);

if(arrow_up!=EMPTY_VALUE)return(1);
if(arrow_dn!=EMPTY_VALUE)return(-1);
}
return(0);
}

int ArrowSignal2()
{
for(int i=1;i<=200;i++)
{
double arrow_up=iCustom(Symbol(),0,"15 min ich.ind",0,i+1);
double arrow_dn=iCustom(Symbol(),0,"15 min ich.ind",1,i+1);

if(arrow_up!=EMPTY_VALUE)return(1);
if(arrow_dn!=EMPTY_VALUE)return(-1);
}
return(0);
}

وبالنسبة لشروط الشراء

ArrowSignal2()==-1&&ArrowSignal1()==1


والبيع كالاتي

ArrowSignal2()==1&&ArrowSignal1()==-1

ارجو تصحيح الاخطاء ان وجد لان الاكسبرت لا يفتح صفقات

الشروط غير صحيحة فهي تعبر فقط عن آخر اشارة للمؤشر
لكن بدل كل هذا استخدم فقط دالة تستخرج نوع اخر صفقة OrderType
وبالتالي عند البيع تشترط وجود آخر صفقة من نوع شراء والعكس بالشراء

حل آخر
ستضع متغير من نوع كومنت خارج الدوال مثلا:

static string LastSignal="";

ثم بداخل الدالة الرئيسية ستضع شروط فتح الشراء ولكن تضيف الشرط التالي :

if(LastSignal!="BUY")
وبعد دالة فتح الشراء أي اسفل سطر OrderSend ستضع
LastSignal="BUY";

ثم نأتي للبيع بنفس الطريقة

if(LastSignal!="SELL")
وبعد دالة فتح البيع أي اسفل سطر OrderSend ستضع
LastSignal="SELL";

بهذه الطريقة لن يفتح شراء إلا إذا كانت آخر صفقة بيع ولن يفتح بيع إلا إذا كانت آخر صفقة شراء...

kira-h
16-05-2018, 10:51 PM
نشمي يا حسن,, كثر الله من أمثالك. شكرا كتير
بارك الله فيك

kira-h
16-05-2018, 10:56 PM
السلام عليكم أستاذ
المضاعفات التالية تتم بضرب اللوت ب 1.4 ثم تقريبه بحيث تكون النتيجة : 0.01 - 0.01- 0.02- 0.03- 0.05-0.08-0.11-0.15-0.21
كيف أستطيع الإحتفاظ بقيمة اللوت المضاعف قبل التقريب ؟ لأنه 0.01*1.4 ستعطي 0.014 وبعد التقريب سيكون 0.01 لكن المضاعفة الثانية هي نتيجة ضرب 0.014*1.4 = 0.0169 وتعطي لوت 0.01 - المضاعفة الثالثة هي 0.0169*1.4 = 0.0236

مع جزيل الشكر
وعليكم السلام
ستضع متغير داخلي خارج الدوال الرئيسية من نوع static double وتستخدمه قبل معادلة المضاعفات مباشرة التقريب
مثلا


static double lo=0;

void OnTick()
{
double lo=LastLots()*1.4;
}


وبهذا تستخدم القيمة lo التي هي اللوت الجديد قبل التقريب
LastLots هذه فقط مثال لدالة تستخرج لوت آخر صفقة

sabil
17-05-2018, 12:18 AM
الشروط غير صحيحة فهي تعبر فقط عن آخر اشارة للمؤشر
لكن بدل كل هذا استخدم فقط دالة تستخرج نوع اخر صفقة OrderType
وبالتالي عند البيع تشترط وجود آخر صفقة من نوع شراء والعكس بالشراء

حل آخر
ستضع متغير من نوع كومنت خارج الدوال مثلا:

static string LastSignal="";

ثم بداخل الدالة الرئيسية ستضع شروط فتح الشراء ولكن تضيف الشرط التالي :

if(LastSignal!="BUY")
وبعد دالة فتح الشراء أي اسفل سطر OrderSend ستضع
LastSignal="BUY";

ثم نأتي للبيع بنفس الطريقة

if(LastSignal!="SELL")
وبعد دالة فتح البيع أي اسفل سطر OrderSend ستضع
LastSignal="SELL";

بهذه الطريقة لن يفتح شراء إلا إذا كانت آخر صفقة بيع ولن يفتح بيع إلا إذا كانت آخر صفقة شراء...

شكراً اخي حسن
كل ده جميل ومفهوم بس انا اقصد حاجة تانية خالص

شايف الصورة المرفقة؟
انا عملت مؤشر يرسم اسهم بناءاً على شروط معينة طول ما الشرط متوفر بيرسم سهم عند كل شمعة
طيب انا عايز ادخل شراء او بيع فقط عند السهم الاول فقط
يعني بيع عند اول سهم احمر وشراء عند اول سهم سماوي
وعشان اعمل كده يبقى لازما اقارن السهمين ببعض
يعني شروط الشراء كالاتي
عند اول سهم سماوي بعد اخر سهم احمر ... يدخل شراء
عند اول سهم احمر بعد اخر سهم سماوي ... يدخل بيع

يعني لا يدخل شراء او بيع مع اي سهم بل السهم الاول فقط

تم ارفاق صورة ومعها المؤشر ..

kira-h
17-05-2018, 04:45 PM
شكراً اخي حسن
كل ده جميل ومفهوم بس انا اقصد حاجة تانية خالص

شايف الصورة المرفقة؟
انا عملت مؤشر يرسم اسهم بناءاً على شروط معينة طول ما الشرط متوفر بيرسم سهم عند كل شمعة
طيب انا عايز ادخل شراء او بيع فقط عند السهم الاول فقط
يعني بيع عند اول سهم احمر وشراء عند اول سهم سماوي
وعشان اعمل كده يبقى لازما اقارن السهمين ببعض
يعني شروط الشراء كالاتي
عند اول سهم سماوي بعد اخر سهم احمر ... يدخل شراء
عند اول سهم احمر بعد اخر سهم سماوي ... يدخل بيع

يعني لا يدخل شراء او بيع مع اي سهم بل السهم الاول فقط

تم ارفاق صورة ومعها المؤشر ..
إذن ستقوم بعمل دالة للمؤشر كالتالي :


double ch(int index,int shift)
{
return(iCustom(Symbol(),0,"chomo",index,shift));
}


ودالة معرفة آخر اشارة للمؤشر بعد الشمعة 2 أي i=2 كالتالي:


int LastSignal()
{
for(int i=2;i<=100;i++)
{
if(ch(0,i)!=0)return(1);
if(ch(1,i)!=0)return(-1);
}
return(0);
}


وبالتالي شروط الشراء كالتالي:

if(LastSignal()==-1&&ch(0,1)!=0)

والبيع كالتالي :

if(LastSignal()==1&&ch(1,1)!=0)

sabil
17-05-2018, 11:19 PM
إذن ستقوم بعمل دالة للمؤشر كالتالي :


double ch(int index,int shift)
{
return(iCustom(Symbol(),0,"chomo",index,shift));
}


ودالة معرفة آخر اشارة للمؤشر بعد الشمعة 2 أي i=2 كالتالي:


int LastSignal()
{
for(int i=2;i<=100;i++)
{
if(ch(0,i)!=0)return(1);
if(ch(1,i)!=0)return(-1);
}
return(0);
}


وبالتالي شروط الشراء كالتالي:

if(LastSignal()==-1&&ch(0,1)!=0)

والبيع كالتالي :

if(LastSignal()==1&&ch(1,1)!=0)

اشتغل اخيرا
الف شكر ياغالي
ربنا يوفقك ويعطيك الصحة والعافية ويباركلك

كل سنة وانت طيب
رمضان كريم

kira-h
18-05-2018, 12:07 AM
اشتغل اخيرا
الف شكر ياغالي
ربنا يوفقك ويعطيك الصحة والعافية ويباركلك

كل سنة وانت طيب
رمضان كريم
وإياك أخي الكريم
وكل عام وأنتم بخير

samizhraldeen
18-05-2018, 07:01 PM
وعليكم السلام
بسيطة


double v1=iVolume(Symbol(),0,1),
v2=iVolume(Symbol(),0,2),
v3=iVolume(Symbol(),0,3);


if(v1>v2&&v2>v3)//بار 1 اخضر و بار 2 اخضر
if(v1>v2&&v2<v3)//بار 1 اخضر و بار 2 احمر




اتشكرك ياغالي دايما معطاء

ممكن تساعدني في اعطائي كود مؤشر aligator

وتعطيني مثال عن طريقة الشراء والبيع فيه

اتشكرك

Tarek987
19-05-2018, 01:56 PM
السلام عليكم ..... استاذ حسن ممكن تشرحلنا for loop بطريقة الخاصة ؟
اذا في مجال تشرح كيف الكود بيمشي داخل ال for loop.

kira-h
19-05-2018, 05:09 PM
اتشكرك ياغالي دايما معطاء

ممكن تساعدني في اعطائي كود مؤشر aligator

وتعطيني مثال عن طريقة الشراء والبيع فيه

اتشكرك
الكود كالتالي:



double J=iAlligator(Symbol(),0,13,8,8,5,5,3,2,4,MODE_GATO RJAW,1),
T=iAlligator(Symbol(),0,13,8,8,5,5,3,2,4,MODE_GATO RTEETH,1),
L=iAlligator(Symbol(),0,13,8,8,5,5,3,2,4,MODE_GATO RLIPS,1);

if(J>T&&T>L)//Buy

samizhraldeen
21-05-2018, 01:29 AM
الكود كالتالي:



double J=iAlligator(Symbol(),0,13,8,8,5,5,3,2,4,MODE_GATO RJAW,1),
T=iAlligator(Symbol(),0,13,8,8,5,5,3,2,4,MODE_GATO RTEETH,1),
L=iAlligator(Symbol(),0,13,8,8,5,5,3,2,4,MODE_GATO RLIPS,1);

if(J>T&&T>L)//Buy


يعني مافي داعي نكرر الكود مرتين مثل الموفينغ

مرة مؤشر التمساح بطيء ومرة سريع مشان نبرهن التقاطع

Ahmed
21-05-2018, 01:21 PM
السلام عليكم استاذ حسن
اريد ان اعرف ما الهدف من هذا الكود

MathSqrt(200)

kira-h
21-05-2018, 04:53 PM
السلام عليكم استاذ حسن
اريد ان اعرف ما الهدف من هذا الكود

MathSqrt(200)
وعليكم السلام
الوظيفة MathSqrt تقوم بحساب الجذر التربيعي للرقم المدخل

Ahmed
21-05-2018, 10:13 PM
بارك الله فيك وجزاك الله خيرا

kira-h
22-05-2018, 04:27 PM
بارك الله فيك وجزاك الله خيرا
وإياك اخي الكريم

Waddah
23-05-2018, 11:00 AM
السلام عليكم أستاذ
في إكسبرت مضاعفات تم تنفيذ كود يرسم خط على الشارت عند سعر البريك إيفن لمجموعة الصفقات .... لكن كيف يتم تحريك هذا الخط عند فتح صفقة جديدة (هل يتم حذفه ورسم خط جديد ؟ أم يمكن تغيير سعر الخط المرسوم ؟) ممكن المساعدة في هذه الجزئية لو سمحت

kira-h
23-05-2018, 08:19 PM
السلام عليكم أستاذ
في إكسبرت مضاعفات تم تنفيذ كود يرسم خط على الشارت عند سعر البريك إيفن لمجموعة الصفقات .... لكن كيف يتم تحريك هذا الخط عند فتح صفقة جديدة (هل يتم حذفه ورسم خط جديد ؟ أم يمكن تغيير سعر الخط المرسوم ؟) ممكن المساعدة في هذه الجزئية لو سمحت
وعليكم السلام
نعم يتم حذف الخط ورسمه من جديد

مثال لدالة رسم خط أفقي :


void line(string name,double pr1,color clrr,int style)
{
if(ObjectFind(name)!=0)
{
ObjectCreate(name,OBJ_HLINE,0,0,pr1);
ObjectSet(name,OBJPROP_COLOR,clrr);
ObjectSet(name,OBJPROP_STYLE,style);
}
else
{
if(ObjectGet(name,OBJPROP_PRICE1)!=pr1)
{
ObjectDelete(name);
}
}
}

Ahmed
24-05-2018, 11:10 PM
حياك الله أخي
لمعرفة شرط إشارة مؤشر اسهم على حسب نوعه وقيمته بتلك الشمعة
نوع المؤشر ينقسم إلى قسمين مؤشر اندكس وهو الذي لا نستطيع تغيير مكان السهم على الشارت وسنجد ألوانه بخانة منفصلة للمؤشر خاصة بالالوان
ويمكن معرفة قيمة هذا النوع من الأسهم باستخدام الوظيفة icustom
مثال لقيمة سهم ازرق ذو اللون الاول بخانة الألون (0) لمؤشر اسمه arrow عند الشمعة 1 كالتالي :


double up=icustom(symbol(),0,"arrow",0,1);
بحيث 0 ترتيب لون السهم بخانة الألوان للمؤشر
1 رقم الشمعة


ثم نستخدم الوظيفة comment لمعرفة قيمة المؤشر على الشارت عند بالشمعة 1، وعند عدم وجوده بالشمعة 1، لكي نستنتج الشرط من المقارنة :

comment(up);

وبالتالي عند عدم وجود السهم الأزرق up بالشمعة 1 سنلاحظ أنه القيمة إما تأخد 0 أو 1- أو عدد كبيرة جدا 2147483647 أو أي قيمة أخرى...
وعند وجود السهم بالشمعة 1 نجد أن القيمة تغيرت إلى قيمة أخرى كدلالة على وجودة مثلا إلى السعر الحالي ، أو سعر اللو المهم مخالفة للقيم السابقة عند عدم وجوده
وبالتالي تكون الشروط ببساطة كالتالي :


if(up!=0)
أو
if(up!=-1)
أو
if(up!=empty_value)// empty_value=2147483647

يعني الشرط up يخالف قيمة السهم عند عدم وجوده بالشمعة 1 (أو أي شمعة)
نفس الشيء بالسهم الأحمر أو الهابط
//-----
نأتي الان إلى النوع الثاني عبارة عن كائن على الشارت (أوبجكت) يعني يمكن تحريك السهم بالماوس مثل الترندات والخطوط ...
سنستخدم في هذه الحالة الوظيفة objectget لمعرفة توقيت ظهور السهم ونقارنها مع توقيت الشمعة 1 (أو أي شمعة أخرى حسب ما تريد)
مثال اسم السهم الصاعد up سيكون الشرط كالتالي :

double buy=objectget("up",objprop_time1);

if(buy>=time[1])//شرط الشراء
السلام عليكم استاذ حسن
انا حاولت اعمل اكسبيرت لهذا المؤشر عندما يكون الاوبجيكت المسمى up اكبر من 70 يفتح صفقة شراء لاكن لم اوفق واستخدمت الود

if(ObjectDescription("UP") > "70%")الرجاء توضيح كيف يمكن عمل ذلك
7460

kira-h
24-05-2018, 11:13 PM
السلام عليكم استاذ حسن
انا حاولت اعمل اكسبيرت لهذا المؤشر عندما يكون الاوبجيكت المسمى up اكبر من 70 يفتح صفقة شراء لاكن لم اوفق واستخدمت الود

if(ObjectDescription("UP") > "70%")الرجاء توضيح كيف يمكن عمل ذلك
7460

وعليكم السلام
ارفق المؤشر للمراجعة

Ahmed
25-05-2018, 04:40 PM
وعليكم السلام
ارفق المؤشر للمراجعة
مرفق المؤشر

kira-h
25-05-2018, 06:12 PM
مرفق المؤشر
قيمتهما كالتالي :


double dn=StrToDouble(ObjectDescription("Trend_DOWN_value"));
double up=StrToDouble(ObjectDescription("Trend_UP_value"));

بمعنى نستخرج الـ text الخاص بالاوبجكت من خلال الوظيفة ObjectDescription وبما ان هذا الـ text عبارة عن رقم من نوع string سنقوم بتحويله إلى عدد عشري من نوع double باستخدام الوظيفة StrToDouble وبالتالي ستتمكن من عمل الشروط

Ahmed
25-05-2018, 08:20 PM
بارك الله فيك اخي حسن

kira-h
26-05-2018, 06:15 PM
بارك الله فيك اخي حسن
وإياك أخي الكريم

sabil
28-05-2018, 03:00 AM
اخي حسن
فاكر الدالة دي؟
بتاعة ادارة رأس المال
عايز اعملها تعديل بحيث تشتغل على الدهب بدقة
لانه بيحسب النقاط على الرقمين بعد الفاصلة وده غلط
انا عايزه يحسب على الاربع ارقام قبل الفاصلة
وكذلك التعديل يشمل الهدف ايضا


double pipsbuy=(High[1]-Bid)/Point;
if(Tryy>0&&pipsbuy>0)double lotsbuy=(Balance/Tryy/pipsbuy);

double pipssell=(Ask-Low[1])/Point;
if(Tryy>0&&pipssell>0)double lotssell=(Balance/Tryy/pipssell);
double Takeprofitbuy=(Ask-Low[1])/Point/10*Step_TakeProfits_Buy;
double Takeprofitsell=(High[1]-Bid)/Point/10*Step_TakeProfits_Sell;

kira-h
28-05-2018, 08:50 PM
اخي حسن
فاكر الدالة دي؟
بتاعة ادارة رأس المال
عايز اعملها تعديل بحيث تشتغل على الدهب بدقة
لانه بيحسب النقاط على الرقمين بعد الفاصلة وده غلط
انا عايزه يحسب على الاربع ارقام قبل الفاصلة
وكذلك التعديل يشمل الهدف ايضا


double pipsbuy=(High[1]-Bid)/Point;
if(Tryy>0&&pipsbuy>0)double lotsbuy=(Balance/Tryy/pipsbuy);

double pipssell=(Ask-Low[1])/Point;
if(Tryy>0&&pipssell>0)double lotssell=(Balance/Tryy/pipssell);
double Takeprofitbuy=(Ask-Low[1])/Point/10*Step_TakeProfits_Buy;
double Takeprofitsell=(High[1]-Bid)/Point/10*Step_TakeProfits_Sell;
السلام عليكم
ليست لدي خبرة بالتداول على الذهب، لهذا لا اعلم كم البوينت الخاص به!
ولكن يمكنك عمل الشروط بنفسك، يعني مثلا تقول له إذا كان سعر الذهب عدد أرقامه بعد الفاصلة كذا يكون البوينت كذا
مثال على العملات:


double pt;


int OnInit()
{
if(_Digits<4){pt=0.01;}else{pt=0.0001;}
}


يعني إذا عدد ارقامه بعد الفاصلة (الديجيت) أصغر قطعا من 4 أي 3 أو 2 (كأزواج الين بالمنصة الخماسية والرباعية) سيكون البوينت 0.01
والعكس else إذا كانت أكبر من أو يساوي 4 سيكون البوينت 0.0001

لهذا من خبرتك بالتداول على الأزواج المختلفة تضع لها شروط خاصة بـ البوينت ثم تستبدل Point بـ pt في حساب المسافات بالنقاط كالهدف والوقف...

Ahmed
31-05-2018, 03:34 PM
السلام عليكم استاذ حسن
احاول عمل اكسبيرت يعتمد على تقاطعات مؤشر THV4 Trix V1.0
شروط الشراء
تقاطع كل من الخطين واللون اخضر
7605


شروط البيع تقاطع كل من الخطين واللون أحمر
7607

لكن عند وضع الاكسبيرت على الشارت تتفير اعدادات المؤشر ويظهر ويختفي من الشارت ولا يعمل الاكسبيرت
الرجاء توضيح اين الخطاء
مرفق المؤشر والاكسبيرت
بارك الله فيك

//+------------------------------------------------------------------+//| THV4 Trix V1.0.mq4 |//| Copyright 2018, MetaQuotes Software Corp. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright "Copyright 2018, MetaQuotes Software Corp."#property link "https://www.mql5.com"#property version "1.00"#property strict
input double Manual_Lot = 0.01;input int Stop_Loss = 50;input int Take_Profit = 50;input int EA_Magic_Number = 6666;
int My_slipage_Order = 10;int My_slipage_Close = 3;double My_point;int A;//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+int OnInit(){
if(_Digits==3||_Digits==5)A=10;else A=1; if(_Digits<4) My_point = 0.01; else My_point = 0.0001; return(INIT_SUCCEEDED);}//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+void OnDeinit(const int reason){
}//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+void OnTick(){
/* aTrix_V1=iCustom(Symbol(),0,"THV4 Trix V1.0",0,1); bTrix_V1=iCustom(Symbol(),0,"THV4 Trix V1.0",1,1); cTrix_V1=iCustom(Symbol(),0,"THV4 Trix V1.0",2,1); dTrix_V1=iCustom(Symbol(),0,"THV4 Trix V1.0",3,1); */
double aTrix_V1=iCustom(Symbol(),0,"THV4 Trix V1.0",35,clrBlack,false, false, false, false, false, false, false,1, 1, true,750,500, false, false, false, false, false,false,clrDodgerBlue,clrFireBrick,clrBlack, clrBlack, clrBlack,0, true,10,7 ,16 ,clrOrange, 13 ,22 ,clrGreen ,1 ,8 ,clrFireBrick,0,9,clrBlue, false,true ,true ,0,false,true ,true ,true ,true ,true ,false,0,1); double bTrix_V1=iCustom(Symbol(),0,"THV4 Trix V1.0",35,clrBlack,false, false, false, false, false, false, false,1, 1, true,750,500, false, false, false, false, false,false,clrDodgerBlue,clrFireBrick,clrBlack, clrBlack, clrBlack,0, true,10,7 ,16 ,clrOrange, 13 ,22 ,clrGreen ,1 ,8 ,clrFireBrick,0,9,clrBlue, false,true ,true ,0,false,true ,true ,true ,true ,true ,false,1,1); double cTrix_V1=iCustom(Symbol(),0,"THV4 Trix V1.0",20,clrBlack,false, false, false, false, false, false, false,1, 1, true,750,500, false, false, false, false, false,false,clrDodgerBlue,clrFireBrick,clrBlack, clrBlack, clrBlack,0, true,10,7 ,16 ,clrOrange, 13 ,22 ,clrGreen ,1 ,8 ,clrFireBrick,0,9,clrBlue, false,true ,true ,0,false,true ,true ,true ,true ,true ,false,2,1); double dTrix_V1=iCustom(Symbol(),0,"THV4 Trix V1.0",20,clrBlack,false, false, false, false, false, false, false,1, 1, true,750,500, false, false, false, false, false,false,clrDodgerBlue,clrFireBrick,clrBlack, clrBlack, clrBlack,0, true,10,7 ,16 ,clrOrange, 13 ,22 ,clrGreen ,1 ,8 ,clrFireBrick,0,9,clrBlue, false,true ,true ,0,false,true ,true ,true ,true ,true ,false,3,1);
if(Count_Orders(OP_BUY)==0) if(bTrix_V1 > aTrix_V1 && dTrix_V1 > cTrix_V1) { bool Buy_Order = OrderSend( Symbol(), OP_BUY, Manual_Lot, NormalizeDouble(Ask,Digits), My_slipage_Order*A, 0, 0, "", EA_Magic_Number, 0, clrBlue); // امر شراء }
if(Count_Orders(OP_SELL)==0) if(bTrix_V1 < aTrix_V1 && dTrix_V1 < cTrix_V1) { bool Sell_Order = OrderSend( Symbol(), OP_SELL, Manual_Lot, NormalizeDouble(Bid,Digits), My_slipage_Order*A, 0, 0, "", EA_Magic_Number, 0, clrRed); // امر بيع }

}//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+
int Count_Orders (int type){ int ccnt=0; for(int i =0;i<OrdersTotal();i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) if(OrderSymbol() == Symbol() && OrderMagicNumber() == EA_Magic_Number) { if(OrderType()==type) { ccnt++; } } } return(ccnt);} //+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+

kira-h
31-05-2018, 05:52 PM
السلام عليكم استاذ حسن
احاول عمل اكسبيرت يعتمد على تقاطعات مؤشر THV4 Trix V1.0
شروط الشراء
تقاطع كل من الخطين واللون اخضر



شروط البيع تقاطع كل من الخطين واللون أحمر


لكن عند وضع الاكسبيرت على الشارت تتفير اعدادات المؤشر ويظهر ويختفي من الشارت ولا يعمل الاكسبيرت
الرجاء توضيح اين الخطاء
مرفق المؤشر والاكسبيرت
بارك الله فيك




وعليكم السلام
مرفق الاكسبيرت

Ahmed
31-05-2018, 09:57 PM
وعليكم السلام
مرفق الاكسبيرت

بارك الله فيك استاذ حسن وكتر الله من امثالك
لكن مازالت المشكلة موجودة
عند تشغيل الاكسبيرت تظهر هذه الصورة
وهي تغير اعدادات الموشر وكلما عدلتها تعود لمثل هذه الصورة
7619

kira-h
01-06-2018, 04:41 PM
بارك الله فيك استاذ حسن وكتر الله من امثالك
لكن مازالت المشكلة موجودة
عند تشغيل الاكسبيرت تظهر هذه الصورة
وهي تغير اعدادات الموشر وكلما عدلتها تعود لمثل هذه الصورة

وإياك أخي الكريم
هذا لأنك لم تضع الاعدادات النصية ضمن اعدادات دوال المؤشر، يعني الاعدادات غير مكتملة
مرفق الاكسبيرت

sabil
01-06-2018, 09:23 PM
عايز اعمل تريلينج ستيب او ستوب بناءاً على المعادلة التالية
يطرح المسافة بين الهاي واللو للشمعة السابقة والناتج يكون هو التريلينج ستيب

Ahmed
01-06-2018, 11:01 PM
وإياك أخي الكريم
هذا لأنك لم تضع الاعدادات النصية ضمن اعدادات دوال المؤشر، يعني الاعدادات غير مكتملة
مرفق الاكسبيرت
بارك الله فيك اخي حسن

kira-h
02-06-2018, 02:39 AM
عايز اعمل تريلينج ستيب او ستوب بناءاً على المعادلة التالية
يطرح المسافة بين الهاي واللو للشمعة السابقة والناتج يكون هو التريلينج ستيب
السلام عليكم
هل عند كل شمعة جديدة أم فقط لمرة واحدة ؟

kira-h
02-06-2018, 02:42 AM
بارك الله فيك اخي حسن
وإياك أخي

sabil
02-06-2018, 05:59 AM
السلام عليكم
هل عند كل شمعة جديدة أم فقط لمرة واحدة ؟

لمرة واحدة

Ahmed
02-06-2018, 04:28 PM
السلام عليكم استاذ حسن
اريد وظيفة تحسب مجموع الخسارة لصفقات الهيستوري في اليوم الحالي
بارك الله فيك

kira-h
02-06-2018, 05:31 PM
لمرة واحدة

الكود كالتالي اشترطت فيه عند تفعيل صفقة يتم حساب المعادلة لمرة واحدة :


static double TrailingStop=0;


void OnTick()
{
if(Orderscnt()==0)TrailingStop=0;

if(Orderscnt()>0&&TrailingStop==0)TrailingStop=High[1]-Low[1];

if(TrailingStop>0)MoveTrailingStop();
}


void MoveTrailingStop()
{
bool s,mod;
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int tk=OrderTicket(),
ot=OrderType(),
mn=OrderMagicNumber();
double op=OrderOpenPrice(),
sl=OrderStopLoss(),
tp=OrderTakeProfit();
if(sy==Symbol()&&mn==MagicNo&&ot<=OP_SELL)
{
if(ot==OP_BUY)
{
if(NormalizeDouble(Ask,Digits)>NormalizeDouble(op+TrailingStop,Digits))
{
if((NormalizeDouble(sl,Digits)<NormalizeDouble(Bid-TrailingStop,Digits))||sl==0)
{
mod=OrderModify(tk,op,NormalizeDouble(Bid-TrailingStop,Digits),tp,0,Blue);
}
}
}
else
{
if(NormalizeDouble(Bid,Digits)<NormalizeDouble(op-TrailingStop,Digits))
{
if((NormalizeDouble(sl,Digits)>(NormalizeDouble(Ask+TrailingStop,Digits)))||sl==0 )
{
mod=OrderModify(tk,op,NormalizeDouble(Ask+Trailing Stop,Digits),tp,0,Red);
}
}
}
}
}
}

kira-h
02-06-2018, 05:34 PM
السلام عليكم استاذ حسن
اريد وظيفة تحسب مجموع الخسارة لصفقات الهيستوري في اليوم الحالي
بارك الله فيك

وعليكم السلام
الدالة كالتالي :


double DailyHistoryProfit()
{
double pts;
for(int i=0;i<OrdersHistoryTotal();i++)
{
bool s=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ot=OrderType();
double pt=OrderProfit(),
sw=OrderSwap(),
cm=OrderCommission();
datetime tm=OrderCloseTime();

if(sy==Symbol()&&mn==MagicNo)
{
if(tm>=iTime(Symbol(),1440,0))
{
pts+=pt+sw+cm;
}
}
}
return(pts);
}

Ahmed
02-06-2018, 08:58 PM
بارك الله فيك اخي حسن

sabil
03-06-2018, 12:38 AM
الكود كالتالي اشترطت فيه عند تفعيل صفقة يتم حساب المعادلة لمرة واحدة :


static double TrailingStop=0;


void OnTick()
{
if(Orderscnt()==0)TrailingStop=0;

if(Orderscnt()>0&&TrailingStop==0)TrailingStop=High[1]-Low[1];

if(TrailingStop>0)MoveTrailingStop();
}


void MoveTrailingStop()
{
bool s,mod;
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int tk=OrderTicket(),
ot=OrderType(),
mn=OrderMagicNumber();
double op=OrderOpenPrice(),
sl=OrderStopLoss(),
tp=OrderTakeProfit();
if(sy==Symbol()&&mn==MagicNo&&ot<=OP_SELL)
{
if(ot==OP_BUY)
{
if(NormalizeDouble(Ask,Digits)>NormalizeDouble(op+TrailingStop,Digits))
{
if((NormalizeDouble(sl,Digits)<NormalizeDouble(Bid-TrailingStop,Digits))||sl==0)
{
mod=OrderModify(tk,op,NormalizeDouble(Bid-TrailingStop,Digits),tp,0,Blue);
}
}
}
else
{
if(NormalizeDouble(Bid,Digits)<NormalizeDouble(op-TrailingStop,Digits))
{
if((NormalizeDouble(sl,Digits)>(NormalizeDouble(Ask+TrailingStop,Digits)))||sl==0 )
{
mod=OrderModify(tk,op,NormalizeDouble(Ask+Trailing Stop,Digits),tp,0,Red);
}
}
}
}
}
}


جاري التجربة ..
جزاك الله خيراً

zied78
03-06-2018, 12:03 PM
السلام عليكم ورحمة الله
في الاسفل كود لفتح صفقة شراء عند الضغط على الزر الخاص بالزوج ما ابحث عنه هو الكود لغلق الصفقة ليس كود غلق كل الصفقات هذه اعرفها انما غلق صفقة لزوج الموافق لزر الغلق .

if(Object_Name==UniqueID+"Panel_Buy"+string(i))
{
if(StopLoss==0)SL=0;else SL=Ask-StopLoss*point;
if(TakeProfit==0)TP=0;else TP=Ask+TakeProfit*point;

ticket=OrderSend(SymbolName(i,true),OP_BUY,Lots,No rmalizeDouble(Ask,Digits),3*P,SL,TP,"Panel EA",0,0,Blue);
ObjectSetInteger(0,Object_Name,OBJPROP_SELECTED,fa lse);
ObjectSetInteger(0,Object_Name,OBJPROP_STATE,false );
}

Mohamadsabry2040
03-06-2018, 03:26 PM
جزاكم الله خيرا مقدما مطلوب اكسبيرت اسكالبينج بشموع الرينكو بهدف و استوب مخفي يكون خمس نقاط او نقطه واحده مع امكانيه التعديل بالزياده والنقص مع تحديد اوقات معينه لدخول الصفقات خلال اليوم وفي حاله ضرب الاستوب يتم الدخول بصفقه معاكسه بضعف الاستوب وتستمر المضاعفات حتي تربح الصفقه شروط الدخول الوقت المحدد+الشمعه السابقه اذا كانت هابطه بيع والعكس صحيح يرجي وضع متغيرات خارجيه لاوقات الدخول و عدد النقاط ومضاعفاتها

kira-h
03-06-2018, 05:11 PM
بارك الله فيك اخي حسن


جاري التجربة ..
جزاك الله خيراً

بالتوفيق إن شاء الله

kira-h
03-06-2018, 05:12 PM
جزاكم الله خيرا مقدما مطلوب اكسبيرت اسكالبينج بشموع الرينكو بهدف و استوب مخفي يكون خمس نقاط او نقطه واحده مع امكانيه التعديل بالزياده والنقص مع تحديد اوقات معينه لدخول الصفقات خلال اليوم وفي حاله ضرب الاستوب يتم الدخول بصفقه معاكسه بضعف الاستوب وتستمر المضاعفات حتي تربح الصفقه شروط الدخول الوقت المحدد+الشمعه السابقه اذا كانت هابطه بيع والعكس صحيح يرجي وضع متغيرات خارجيه لاوقات الدخول و عدد النقاط ومضاعفاتها
هذا الموضوع عام مخصص فقط لللأسئلة البرمجية

kira-h
03-06-2018, 05:23 PM
السلام عليكم ورحمة الله
في الاسفل كود لفتح صفقة شراء عند الضغط على الزر الخاص بالزوج ما ابحث عنه هو الكود لغلق الصفقة ليس كود غلق كل الصفقات هذه اعرفها انما غلق صفقة لزوج الموافق لزر الغلق .

if(Object_Name==UniqueID+"Panel_Buy"+string(i))
{
if(StopLoss==0)SL=0;else SL=Ask-StopLoss*point;
if(TakeProfit==0)TP=0;else TP=Ask+TakeProfit*point;

ticket=OrderSend(SymbolName(i,true),OP_BUY,Lots,No rmalizeDouble(Ask,Digits),3*P,SL,TP,"Panel EA",0,0,Blue);
ObjectSetInteger(0,Object_Name,OBJPROP_SELECTED,fa lse);
ObjectSetInteger(0,Object_Name,OBJPROP_STATE,false );
}



وعليكم السلام
دالة الاغلاق حسب الزوج كالتالي:



void CloseOrders(string symbol,int type=-1)
{
bool close;
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==symbol&&OrderMagicNumber()==MagicNo&&(OrderType()==type||type==-1))
{
if(OrderType()==OP_BUY)close=OrderClose(OrderTicke t(),OrderLots(),MarketInfo(symbol,MODE_BID),20,Red );
else if(OrderType()==OP_SELL)close=OrderClose(OrderTick et(),OrderLots(),MarketInfo(symbol,MODE_ASK),20,Re d);
else if(OrderType()>OP_SELL)close=OrderDelete(OrderTicket(),Red);
}
}
}

مثال لاغلاق الشراء على زوج اليورودولار :


CloseOrders("EURUSD",OP_BUY);


مثال لاغلاق كل صفقات زوج الدولار ين :


CloseOrders("USDJPY");

Mohamadsabry2040
03-06-2018, 05:30 PM
طيب ماهو دا سؤال برمجي

kira-h
03-06-2018, 06:56 PM
طيب ماهو دا سؤال برمجي
متأكد من ذلك؟!

Mohamadsabry2040
03-06-2018, 08:03 PM
يا استاذنا اعزرنا لو اخطات لكن صاحب الحاجه احيانا يخطا التعبير خاصه ان حديث جدا في البرمجه

zied78
03-06-2018, 08:36 PM
وعليكم السلام
دالة الاغلاق حسب الزوج كالتالي:



void CloseOrders(string symbol,int type=-1)
{
bool close;
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==symbol&&OrderMagicNumber()==MagicNo&&(OrderType()==type||type==-1))
{
if(OrderType()==OP_BUY)close=OrderClose(OrderTicke t(),OrderLots(),MarketInfo(symbol,MODE_BID),20,Red );
else if(OrderType()==OP_SELL)close=OrderClose(OrderTick et(),OrderLots(),MarketInfo(symbol,MODE_ASK),20,Re d);
else if(OrderType()>OP_SELL)close=OrderDelete(OrderTicket(),Red);
}
}
}

مثال لاغلاق الشراء على زوج اليورودولار :


CloseOrders("EURUSD",OP_BUY);


مثال لاغلاق كل صفقات زوج الدولار ين :


CloseOrders("USDJPY");


كل الشكر اخي الكريم .

kira-h
04-06-2018, 07:06 PM
يا استاذنا اعزرنا لو اخطات لكن صاحب الحاجه احيانا يخطا التعبير خاصه ان حديث جدا في البرمجه


كل الشكر اخي الكريم .

بالتوفيق إن شاء الله

bahoma31
04-06-2018, 08:26 PM
السلام عليكم أستاذ كيرا لقد وقعت في مشكلة حيث اني حذفت برنامج شركة البروكر وفقدت الملفات والاكسبرترات التي برمجتها من قبل لكي اضعها في برنامج البروكر الجديد فقعدت ابحث وابحث حتى وجدت هذه النسخة المغلقة فهل يمكنك ان تفتحها لي وجزاك الله خير جزاء

Waddah
05-06-2018, 09:50 AM
السلام عليكم أستاذ
ماهي الدالة التي تعيد الربح او الخسارة الإجمالية بالنقاط لمجموعة صفقات مفتوحة بشكل يدوي على عدة أزواج ؟ مع جزيل الشكر

kira-h
05-06-2018, 05:01 PM
السلام عليكم أستاذ كيرا لقد وقعت في مشكلة حيث اني حذفت برنامج شركة البروكر وفقدت الملفات والاكسبرترات التي برمجتها من قبل لكي اضعها في برنامج البروكر الجديد فقعدت ابحث وابحث حتى وجدت هذه النسخة المغلقة فهل يمكنك ان تفتحها لي وجزاك الله خير جزاء
وعليكم السلام
لا أقوم بفك الملفات ex4 ولا أظن يمكن ذلك منذ التحديث الجديد للميتاتريدر4
يمكنك استخدام برامج استعادة الملفات المحذوفة، ابحث عنها

Ahmed
05-06-2018, 05:02 PM
السلام عليكم استاذ حسن
في نفس هذا الكود
كيف اجعل الامر المعلق يصبح منتهي بعد 5 دقائق
اي يحذف الامر بعد خمس دقائق من وضعة

bool Buy_Stop_Order = OrderSend(Symbol(),OP_BUYSTOP,Manual_Lot,Ask+Pendi ng_Order_Distance*My_point,50,0,0,NULL,Magic_Numbe r,5,clrAqua);

kira-h
05-06-2018, 05:07 PM
السلام عليكم أستاذ
ماهي الدالة التي تعيد الربح او الخسارة الإجمالية بالنقاط لمجموعة صفقات مفتوحة بشكل يدوي على عدة أزواج ؟ مع جزيل الشكر
وعليكم السلام
كالتالي:

double point;

void Points(string symbol)
{
if(MarketInfo(symbol,MODE_DIGITS)<4)point=0.01;else point=0.0001;
}


double All_PIPS()
{
double pips,pipsB,pipsS;
for(int i=0;i<OrdersTotal();i++)
{
bool c=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ot=OrderType();
double op=OrderOpenPrice();

if(mn==0)
{
Points(sy);
if(ot==OP_BUY){pipsB+=(MarketInfo(sy,MODE_BID)-op)/point;}
else if(ot==OP_SELL){pipsS+=(op-MarketInfo(sy,MODE_ASK))/point;}
pips=pipsB+pipsS;
}
}
return(pips);
}

Ahmed
05-06-2018, 10:15 PM
السلام عليكم استاذ حسن
في نفس هذا الكود
كيف اجعل الامر المعلق يصبح منتهي بعد 5 دقائق
اي يحذف الامر بعد خمس دقائق من وضعة

bool Buy_Stop_Order = OrderSend(Symbol(),OP_BUYSTOP,Manual_Lot,Ask+Pendi ng_Order_Distance*My_point,50,0,0,NULL,Magic_Numbe r,5,clrAqua);

sabil
06-06-2018, 02:58 AM
اخي حسن كنت سألت حضرتك قبل كده ازاي اخلي الاكسبرت يشتغل على كل الازواج من خلال ارفاقه على شارت واحد فقط
حضرتك اعطيتني الدوال وما زالت موجودة عندي لكني لاحظت في الاونة الاخيرة تحديثات كثيرة حدثت في الدوال نفسها من جانبك
فهل يوجد تحديث يجعل دوال الشراء والبيع تعمل على كل الازواج دفعة واحدة من خلال وضع الشروط مرة واحدة بدلا من وضعها كل مرة لكل زوج لانها مرهقة وخاصة لو حبيت اضيف تعديلات جديدة في شروط الدخول بعد كده الموضوع هيكون صعب شوية

kira-h
06-06-2018, 08:20 PM
السلام عليكم استاذ حسن
في نفس هذا الكود
كيف اجعل الامر المعلق يصبح منتهي بعد 5 دقائق
اي يحذف الامر بعد خمس دقائق من وضعة

bool Buy_Stop_Order = OrderSend(Symbol(),OP_BUYSTOP,Manual_Lot,Ask+Pendi ng_Order_Distance*My_point,50,0,0,NULL,Magic_Numbe r,5,clrAqua);
وعليكم السلام
الصحيح كالتالي :


bool Buy_Stop_Order = OrderSend(Symbol(),OP_BUYSTOP,Manual_Lot,Ask+Pendi ng_Order_Distance*My_point,50,0,0,NULL,Magic_Numbe r,TimeCurrent()+5*60,clrAqua);

kira-h
06-06-2018, 08:21 PM
اخي حسن كنت سألت حضرتك قبل كده ازاي اخلي الاكسبرت يشتغل على كل الازواج من خلال ارفاقه على شارت واحد فقط
حضرتك اعطيتني الدوال وما زالت موجودة عندي لكني لاحظت في الاونة الاخيرة تحديثات كثيرة حدثت في الدوال نفسها من جانبك
فهل يوجد تحديث يجعل دوال الشراء والبيع تعمل على كل الازواج دفعة واحدة من خلال وضع الشروط مرة واحدة بدلا من وضعها كل مرة لكل زوج لانها مرهقة وخاصة لو حبيت اضيف تعديلات جديدة في شروط الدخول بعد كده الموضوع هيكون صعب شوية
السلام عليكم
أرفق او اكتب الكود المعني بالأمر لمراجعته

sabil
06-06-2018, 09:21 PM
السلام عليكم
أرفق او اكتب الكود المعني بالأمر لمراجعته

دا مثلا شروط شراء زوج اليورو دولار لوحده
يعمل حتى لو ركبنا الاكسبرت على زوج اخر غير اليورو دولار


if(EURUSD==true&&iClose("EURUSD",TimeFrame,1)>K("EURUSD")&&iClose("EURUSD",TimeFrame,1)>SA("EURUSD")&&iClose("EURUSD",TimeFrame,1)>SB("EURUSD")
&&iClose("EURUSD",TimeFrame,1)>m26("EURUSD")&&iClose("EURUSD",TimeFrame,1)>m14("EURUSD")&&iClose("EURUSD",TimeFrame,1)>m200("EURUSD")
&&iClose("EURUSD",TimeFrame,1)>T("EURUSD")&&iClose("EURUSD",TimeFrame,1)>m9("EURUSD")&&iClose("EURUSD",TimeFrame,1)>m5("EURUSD")
&&iClose("EURUSD",TimeFrame,1)>iClose("EURUSD",TimeFrame,2)&&iClose("EURUSD",TimeFrame,1)>iClose("EURUSD",TimeFrame,26)
&&T("EURUSD")>SA("EURUSD")&&T("EURUSD")>SB("EURUSD")&&T("EURUSD")>=K("EURUSD")&&T("EURUSD")>=m26("EURUSD")
&&T("EURUSD")>=m14("EURUSD")&&T("EURUSD")>=m200("EURUSD")&&K("EURUSD")>SA("EURUSD")&&K("EURUSD")>SB("EURUSD")
&&K("EURUSD")>=m200("EURUSD")&&m5("EURUSD")>=m14("EURUSD")&&m5("EURUSD")>=m26("EURUSD")&&m5("EURUSD")>=K("EURUSD")
&&m5("EURUSD")>=m200("EURUSD")&&m9("EURUSD")>=m26("EURUSD")&&m9("EURUSD")>=m14("EURUSD")&&m9("EURUSD")>=K("EURUSD")
&&m9("EURUSD")>=m200("EURUSD")&&m14("EURUSD")>=m200("EURUSD")&&m26("EURUSD")>=m200("EURUSD")&&C("EURUSD")>TTT("EURUSD")
&&C("EURUSD")>KKK("EURUSD")&&C("EURUSD")>SAA("EURUSD")&&C("EURUSD")>SBB("EURUSD")&&C("EURUSD")>m999("EURUSD")&&
C("EURUSD")>m2666("EURUSD")&&C("EURUSD")>m555("EURUSD")&&C("EURUSD")>m1444("EURUSD")&&C("EURUSD")>m2000("EURUSD")
&&C("EURUSD")>iHigh("EURUSD",TimeFrame,26))
{
Points("EURUSD");
if(Orderscnt(OP_BUY,"EURUSD")<1&&BarTime!=iTime("EURUSD",TimeFrame,0))
{
if(Stoploss!=0){SL=MarketInfo("EURUSD",MODE_ASK)-Stoploss*point;}else SL=0;
if(Takeprofit!=0){TP=MarketInfo("EURUSD",MODE_ASK)+Takeprofit*point;}else TP=0;
ticket=OrderSend("EURUSD",OP_BUY,Lots,NormalizeDouble(MarketInfo("EURUSD",MODE_ASK),digits),30,SL,TP,"Kira-h",MagicNo,0,Blue);
}
BarTime=iTime("EURUSD",TimeFrame,0);
}

sabil
06-06-2018, 09:31 PM
شوف بقى لو حبيت اغير شرط واحد بس ف شروط الدخول هحتاج اعمله على كل زوج ودا شيء مرهق
بالاضافة لكثرة الاكواد مما يجعل الاكسبرت لا يعمل بشكل جيد

Ahmed
06-06-2018, 10:39 PM
وعليكم السلام
الصحيح كالتالي :


bool Buy_Stop_Order = OrderSend(Symbol(),OP_BUYSTOP,Manual_Lot,Ask+Pendi ng_Order_Distance*My_point,50,0,0,NULL,Magic_Numbe r,TimeCurrent()+5*60,clrAqua);


بارك الله فيك وجزاك الله خيرا

kira-h
07-06-2018, 03:08 AM
شوف بقى لو حبيت اغير شرط واحد بس ف شروط الدخول هحتاج اعمله على كل زوج ودا شيء مرهق
بالاضافة لكثرة الاكواد مما يجعل الاكسبرت لا يعمل بشكل جيد
مثال لمصفوفة ازواج قم بتطبيقها على دوال المؤشرات بدلالة اسم الزوج


void OnTick()
{
string Symbols_Array[]={"EURUSD","GBPUSD","USDJPY","AUDUSD","NZDUSD"};

int size=ArraySize(Symbols_Array);
for(int i=0;i<size;i++)
{
bool s=OrderSend(suffix+Symbols_Array[i]+perfix,OP_BUY,Lots,MarketInfo(suffix+Symbols_Arra y[i]+perfix,MODE_ASK),30,0,0,"Kira-h",MagicNumber,0,Blue);
}
}

kira-h
07-06-2018, 03:09 AM
بارك الله فيك وجزاك الله خيرا
وإياك أخي

sabil
07-06-2018, 07:00 AM
مثال لمصفوفة ازواج قم بتطبيقها على دوال المؤشرات بدلالة اسم الزوج


void OnTick()
{
string Symbols_Array[]={"EURUSD","GBPUSD","USDJPY","AUDUSD","NZDUSD"};

int size=ArraySize(Symbols_Array);
for(int i=0;i<size;i++)
{
bool s=OrderSend(suffix+Symbols_Array[i]+perfix,OP_BUY,Lots,MarketInfo(suffix+Symbols_Arra y[i]+perfix,MODE_ASK),30,0,0,"Kira-h",MagicNumber,0,Blue);
}
}


جميل بس شروط الدخول اكتبها فين؟
وازاي اتحكم ف تفعيل او تعطيل الازواج في متغير خارجي؟

kira-h
07-06-2018, 06:25 PM
جميل بس شروط الدخول اكتبها فين؟
وازاي اتحكم ف تفعيل او تعطيل الازواج في متغير خارجي؟
مثال لعمل اعدادات خارجية للازواج و طريقة عمل شرط الدخول بالصفقة :


input string Pairs_Name="EURUSD,GBPUSD,AUDUSD,NZDUSD,USDCAD,USDCHF,USDJPY",
suffix="",
perfix="";


void OnTick()
{
string Symbols_Array[];
ushort sep=StringGetCharacter(",",0);
StringSplit(Pairs_Name,sep,Symbols_Array);

for(int i=0;i<ArraySize(Symbols_Array);i++)
{
string sym=suffix+Symbols_Array[i]+perfix;
if(iClose(sym,0,1)>iOpen(sym,0,1))
{
bool s=OrderSend(sym,OP_BUY,Lots,MarketInfo(sym,MODE_AS K),30,0,0,"Kira-h",MagicNo,0,Blue);
}
}
}

sabil
07-06-2018, 11:28 PM
مثال لعمل اعدادات خارجية للازواج و طريقة عمل شرط الدخول بالصفقة :


input string Pairs_Name="EURUSD,GBPUSD,AUDUSD,NZDUSD,USDCAD,USDCHF,USDJPY",
suffix="",
perfix="";


void OnTick()
{
string Symbols_Array[];
ushort sep=StringGetCharacter(",",0);
StringSplit(Pairs_Name,sep,Symbols_Array);

for(int i=0;i<ArraySize(Symbols_Array);i++)
{
string sym=suffix+Symbols_Array[i]+perfix;
if(iClose(sym,0,1)>iOpen(sym,0,1))
{
bool s=OrderSend(sym,OP_BUY,Lots,MarketInfo(sym,MODE_AS K),30,0,0,"Kira-h",MagicNo,0,Blue);
}
}
}


جميل جدا
اقول على الل فهمته وحضرتك صححلي
المتغيرات الخارجية دي
Pairs_Name
suffix
perfix

المقصود بيها انها متغيرات بتساوي ال symbol
يعني هما التلاتة يعتبروا متغير واحد وبيتم تقسيم الازواج عليهم ؟

ثانياً
الزوج الل مش هكتبه يبقى كأنه false
يعني تفعيل او تعطيل الزوج بيتوقف على كتابته او مسحه من المتغيرات الخارجية الثلاثة؟

sabil
08-06-2018, 12:21 AM
كده صح؟

input string Pairs_Name="EURUSD,EURJPY,EURCHF,EURGBP,EURAUD,EURNZD,EURCAD,C ADCHF,CADJPY,CHFJBY",
suffix="GBPUSD,GBPJPY,GBPCAD,GBPCHF,GBPAUD,GBPNZD,NZDUSD,N ZDJPY,NZDCAD,NZDCHF",
perfix="AUDUSD,AUDJPY,AUDCHF,AUDNZD,AUDCAD,USDCAD,USDJPY,U SDCHF";


string Symbols_Array[];
ushort sep=StringGetCharacter(",",0);
StringSplit(Pairs_Name,sep,Symbols_Array);

for(int i=0;i<ArraySize(Symbols_Array);i++)
{
string sym=suffix+Symbols_Array[i]+perfix;
//-------------------------------------------------BUY Order
if(low0<low1&&LastSignal()==-1&&ch(0,1)!=0)
{
if(time!=Time[0])
{
if(Stoploss!=0){double SLb=lp-Stoploss*point;}else SLb=0;
if(Takeprofitbuy!=0){double TPb=Ask+Takeprofitbuy*point;}else TPb=0;
bool b=OrderSend(sym,OP_BUY,NormalizeDouble(lotsbuy,Lot _Decimal),MarketInfo(sym,MODE_ASK),3*Q,SLb,TPb,"aymoon",MagicNo,0,Blue);
time=Time[0];
{
//-----------------------------------------------SELL Order
if(high0>high1&&LastSignal()==1&&ch(1,1)!=0)
{
if(time!=Time[0])
{
if(Stoploss!=0){double SLs=hp+Stoploss*point;}else SLs=0;
if(Takeprofitsell!=0){double TPs=Bid-Takeprofitsell*point;}else TPs=0;
bool s=OrderSend(sym,OP_BUY,NormalizeDouble(lotssell,Lo t_Decimal),MarketInfo(sym,MODE_ASK),3*Q,SLs,TPs,"aymoon",MagicNo,0,Red);
time=Time[0];
}
}
}
}
}
}

kira-h
08-06-2018, 05:48 AM
جميل جدا
اقول على الل فهمته وحضرتك صححلي
المتغيرات الخارجية دي
Pairs_Name تضع قيه اسماء الازواج التس ستعمل عليها وبدون سابقة او لاحقة
suffix تكتب فيها اسم السابقة يعني مثلا زوج اسمه mEURUSD فاسم السابقة هو m واذا لا يوجد اتركه فارغ
perfix تكتب فيها اسم اللاحقة يعني مثلا زوج اسمه EURUSDpro فاسم اللاحقة هو pro واذا لا يوجد اتركه فارغ

المقصود بيها انها متغيرات بتساوي ال symbol
يعني هما التلاتة يعتبروا متغير واحد وبيتم تقسيم الازواج عليهم ؟

ثانياً
الزوج الل مش هكتبه يبقى كأنه false
يعني تفعيل او تعطيل الزوج بيتوقف على كتابته او مسحه من المتغيرات الخارجية الثلاثة؟ نعم صحيح
الرد بالافتباس

kira-h
08-06-2018, 06:00 AM
كده صح؟

input string Pairs_Name="EURUSD,EURJPY,EURCHF,EURGBP,EURAUD,EURNZD,EURCAD,C ADCHF,CADJPY,CHFJBY",
suffix="GBPUSD,GBPJPY,GBPCAD,GBPCHF,GBPAUD,GBPNZD,NZDUSD,N ZDJPY,NZDCAD,NZDCHF",
perfix="AUDUSD,AUDJPY,AUDCHF,AUDNZD,AUDCAD,USDCAD,USDJPY,U SDCHF";


string Symbols_Array[];
ushort sep=StringGetCharacter(",",0);
StringSplit(Pairs_Name,sep,Symbols_Array);

for(int i=0;i<ArraySize(Symbols_Array);i++)
{
string sym=suffix+Symbols_Array[i]+perfix;
//-------------------------------------------------BUY Order
if(low0<low1&&LastSignal()==-1&&ch(0,1)!=0)
{
if(time!=Time[0])
{
if(Stoploss!=0){double SLb=lp-Stoploss*point;}else SLb=0;
if(Takeprofitbuy!=0){double TPb=Ask+Takeprofitbuy*point;}else TPb=0;
bool b=OrderSend(sym,OP_BUY,NormalizeDouble(lotsbuy,Lot _Decimal),MarketInfo(sym,MODE_ASK),3*Q,SLb,TPb,"aymoon",MagicNo,0,Blue);
time=Time[0];
{
//-----------------------------------------------SELL Order
if(high0>high1&&LastSignal()==1&&ch(1,1)!=0)
{
if(time!=Time[0])
{
if(Stoploss!=0){double SLs=hp+Stoploss*point;}else SLs=0;
if(Takeprofitsell!=0){double TPs=Bid-Takeprofitsell*point;}else TPs=0;
bool s=OrderSend(sym,OP_BUY,NormalizeDouble(lotssell,Lo t_Decimal),MarketInfo(sym,MODE_ASK),3*Q,SLs,TPs,"aymoon",MagicNo,0,Red);
time=Time[0];
}
}
}
}
}
}

قم بتصحيح الاخطاء بناء على ما تم شرحه بالمشاركة السابقة
وانتبه لا يجب ان تستخدم الشرط
if(time!=Time[0]) لانه سيفتح صفقة واحدة فقط لانه مرتبط بشمعة الزوج الحالي
لهذا استخدم مكانها شرط له علاقة بكل زوج يعني تستخدم الدالة التالية لمعرفة عدد الصفقات المفعلة بالشمعة الاخيرة حسب اسم الزوج

int LastCandleOrders(string symbol)
{
int cnt;
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
datetime tm=OrderOpenTime();


if(sy==symbol)
{
if(tm>=iTime(symbol,0,0))cnt++;
else return(cnt);
}
}
return(cnt);
}


ثم يكون الشرط كالتالي :


if(LastCandleOrders(sym)==0)

sabil
08-06-2018, 09:08 PM
قم بتصحيح الاخطاء بناء على ما تم شرحه بالمشاركة السابقة
وانتبه لا يجب ان تستخدم الشرط
if(time!=Time[0]) لانه سيفتح صفقة واحدة فقط لانه مرتبط بشمعة الزوج الحالي
لهذا استخدم مكانها شرط له علاقة بكل زوج يعني تستخدم الدالة التالية لمعرفة عدد الصفقات المفعلة بالشمعة الاخيرة حسب اسم الزوج

int LastCandleOrders(string symbol)
{
int cnt;
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
datetime tm=OrderOpenTime();


if(sy==symbol)
{
if(tm>=iTime(symbol,0,0))cnt++;
else return(cnt);
}
}
return(cnt);
}


ثم يكون الشرط كالتالي :


if(LastCandleOrders(sym)==0)


اخي حسن فعلت كما اخبرتني ولكن لم يفتح الاكسبرت اي صفقات رغم توافر شروط الدخول عدة مرات
ارفقتلك الاكسبرت لتعديل الخطأ اذا سمحت

kira-h
08-06-2018, 09:26 PM
اخي حسن فعلت كما اخبرتني ولكن لم يفتح الاكسبرت اي صفقات رغم توافر شروط الدخول عدة مرات
ارفقتلك الاكسبرت لتعديل الخطأ اذا سمحت
لديك أخطاء كثيرة من بينها دالة الشراء الثانية بها ستوب يحسب فوق سعر الدخول! ربما حدث لديك تداخل بين الشراء والبيع،
يوجد كذلك خطأ بأحد الأقواس خاطئ حيث شرطي الشراء والبيع موجودين بنفس الحلقة الخاصة بشرط الشراء
كذلك خطأ بشروط الاغلاق غير مرتبطة بحلقة الأزواج!
كل هذا بسبب عدم ترتيب الكود، فالترتيب مهم أخي لتسهيل المراجعة وبالاخص الأقواس...

مرفق الاكسبيرت
ولا تنسى ان تكون الأزواج المستخدمة موجودة بالماركت واتش، وسبق تشغيل شارت لكل زوج حسب الفريم المستخدم (يعني يوجد بيانات محملة لكل زوج)

sabil
09-06-2018, 02:09 AM
لديك أخطاء كثيرة من بينها دالة الشراء الثانية بها ستوب يحسب فوق سعر الدخول! ربما حدث لديك تداخل بين الشراء والبيع،
يوجد كذلك خطأ بأحد الأقواس خاطئ حيث شرطي الشراء والبيع موجودين بنفس الحلقة الخاصة بشرط الشراء
كذلك خطأ بشروط الاغلاق غير مرتبطة بحلقة الأزواج!
كل هذا بسبب عدم ترتيب الكود، فالترتيب مهم أخي لتسهيل المراجعة وبالاخص الأقواس...

مرفق الاكسبيرت
ولا تنسى ان تكون الأزواج المستخدمة موجودة بالماركت واتش، وسبق تشغيل شارت لكل زوج حسب الفريم المستخدم (يعني يوجد بيانات محملة لكل زوج)

شكراً جزيلاً اخي حسن
وجدت بعض الاخطاء الاخرى كأن يحسب اللوتات والاستوب والهدف على الازواج الاخرى بناءاً على الزوج المرفق به الاكسبرت

فعملت الاتي
وضعت هذه ف اول الدالة الرئيسية

void OnTick()
{

string Symbols_Array[];
ushort sep=StringGetCharacter(",",0);
StringSplit(Pairs_Name,sep,Symbols_Array);

for(int i=0;i<ArraySize(Symbols_Array);i++)
{
string sym=suffix+Symbols_Array[i]+perfix;

ثم تحتها باقي الدوال الخاصة بالادارة والتريلينج لانها الاخرى كانت تحتاج الى تعديل

double middailybuy=(LastOrderCurrent("OpenPrice",OP_BUY)-iLow(sym,PERIOD_D1,0))/2;
double middailysell=(iHigh(sym,PERIOD_D1,0)-LastOrderCurrent("OpenPrice",OP_SELL))/2;

if(Orderscnt()==0)TrailingStop=0;

if(Orderscnt(OP_BUY)>0&&TrailingStop==0)TrailingStop=middailybuy;

if(Orderscnt(OP_SELL)>0&&TrailingStop==0)TrailingStop=middailysell;

if(TrailingStop>0)MoveTrailingStop(sym);

if((USD_Profit!=0&&Profit_By_USD()>=USD_Profit)
||(USD_Loss!=0&&Profit_By_USD()<=-USD_Loss)){CloseOrders2();}


double closeh4=iClose(sym,PERIOD_H4,1);

double cp=iClose(sym,PERIOD_H1,1);
double lp=iLow(sym,PERIOD_D1,0);
double hp=iHigh(sym,PERIOD_D1,0);
double op=iOpen(sym,0,0);

double pipsbuy=(MarketInfo(sym,MODE_ASK)-lp)/Point;
if(Tryy>0&&pipsbuy>0)double lotsbuy=(Balance/Tryy/pipsbuy);

double pipssell=(hp-MarketInfo(sym,MODE_BID))/Point;
if(Tryy>0&&pipssell>0)double lotssell=(Balance/Tryy/pipssell);
double Takeprofitbuy=(MarketInfo(sym,MODE_ASK)-lp)/Point/10*Step_TakeProfits_Buy;
double Takeprofitsell=(hp-MarketInfo(sym,MODE_BID))/Point/10*Step_TakeProfits_Sell;

double closeh1=iClose(Symbol(),0,1);

double low1=iLow(sym,PERIOD_D1,1);
double low0=iLow(sym,PERIOD_D1,0);

double high1=iHigh(sym,PERIOD_D1,1);
double high0=iHigh(sym,PERIOD_D1,0);

لكن هناك دالتين لم تقوم بتعديلهم اخي حسن
وهما التريلينج ستوب والاوردر كونت

ارجو تعديلهما لان ظهرلي اخطاء عند التعديل


void MoveTrailingStop(string symbol)
{
bool s,mod;
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int tk=OrderTicket(),
ot=OrderType(),
mn=OrderMagicNumber();
double op=OrderOpenPrice(),
sl=OrderStopLoss(),
tp=OrderTakeProfit();
if(sy==symbol&&mn==MagicNo&&ot<=OP_SELL)
{
if(ot==OP_BUY)
{
if(NormalizeDouble(MarketInfo(symbol,MODE_ASK),Mar ketInfo(symbol,MODE_DIGITS))>NormalizeDouble(op+TrailingStop,MarketInfo(symbol, MODE_DIGITS))
{
if((NormalizeDouble(sl,MarketInfo(symbol,MODE_DIGI TS))<NormalizeDouble(MarketInfo(symbol,MODE_BID)-TrailingStop,MarketInfo(symbol,MODE_DIGITS)))||sl= =0)
{
mod=OrderModify(tk,op,NormalizeDouble(MarketInfo(s ymbol,MODE_BID))-TrailingStop,MarketInfo(symbol,MODE_DIGITS))),tp,0 ,Blue);
}
}
}
else
{
if(NormalizeDouble(Bid,Digits)<NormalizeDouble(op-TrailingStop,Digits))
{
if((NormalizeDouble(sl,Digits)>(NormalizeDouble(Ask+TrailingStop,Digits)))||sl==0 )
{
mod=OrderModify(tk,op,NormalizeDouble(Ask+Trailing Stop,Digits),tp,0,Red);
}
}
}
}
}
}

int Orderscnt(int type=-1)
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol()&&MagicNo==OrderMagicNumber())
{
if(OrderType()==type||type==-1)
{
cnt++;
}
}
}
}
return(cnt);
}

طيب وماذا عن الدالة OnInit()
الن نقوم بتعديل ما بداخلها هي الاخرى ؟
انا عدلت فيها
مش عارف كده صح ولا انا بألف برمجة ! ههههه


int OnInit()
{
PrintInfoToChart();


string sym=suffix+Pairs_Name+perfix;
if(MarketInfo(sym,MODE_MINLOT)<0.1)Lot_Decimal=2;else Lot_Decimal=1;
if(MarketInfo(sym,MODE_DIGITS)==5||MarketInfo(sym, MODE_DIGITS)==3)Q=10;else Q=1;
if(MarketInfo(sym,MODE_DIGITS)<4)point=0.01;else point=0.0001;
return(INIT_SUCCEEDED);
}

اعذرني فأنا ما زلت مبتديء واتعلم شيئاً فشيئاً بالممارسة لان المراجع الموجودة قديمة ومشتتة

kira-h
09-06-2018, 04:05 AM
شكراً جزيلاً اخي حسن
وجدت بعض الاخطاء الاخرى كأن يحسب اللوتات والاستوب والهدف على الازواج الاخرى بناءاً على الزوج المرفق به الاكسبرت

فعملت الاتي
وضعت هذه ف اول الدالة الرئيسية

void OnTick()
{

string Symbols_Array[];
ushort sep=StringGetCharacter(",",0);
StringSplit(Pairs_Name,sep,Symbols_Array);

for(int i=0;i<ArraySize(Symbols_Array);i++)
{
string sym=suffix+Symbols_Array[i]+perfix;

ثم تحتها باقي الدوال الخاصة بالادارة والتريلينج لانها الاخرى كانت تحتاج الى تعديل

double middailybuy=(LastOrderCurrent("OpenPrice",OP_BUY)-iLow(sym,PERIOD_D1,0))/2;
double middailysell=(iHigh(sym,PERIOD_D1,0)-LastOrderCurrent("OpenPrice",OP_SELL))/2;

if(Orderscnt()==0)TrailingStop=0;

if(Orderscnt(OP_BUY)>0&&TrailingStop==0)TrailingStop=middailybuy;

if(Orderscnt(OP_SELL)>0&&TrailingStop==0)TrailingStop=middailysell;

if(TrailingStop>0)MoveTrailingStop(sym);

if((USD_Profit!=0&&Profit_By_USD()>=USD_Profit)
||(USD_Loss!=0&&Profit_By_USD()<=-USD_Loss)){CloseOrders2();}


double closeh4=iClose(sym,PERIOD_H4,1);

double cp=iClose(sym,PERIOD_H1,1);
double lp=iLow(sym,PERIOD_D1,0);
double hp=iHigh(sym,PERIOD_D1,0);
double op=iOpen(sym,0,0);

double pipsbuy=(MarketInfo(sym,MODE_ASK)-lp)/Point;
if(Tryy>0&&pipsbuy>0)double lotsbuy=(Balance/Tryy/pipsbuy);

double pipssell=(hp-MarketInfo(sym,MODE_BID))/Point;
if(Tryy>0&&pipssell>0)double lotssell=(Balance/Tryy/pipssell);
double Takeprofitbuy=(MarketInfo(sym,MODE_ASK)-lp)/Point/10*Step_TakeProfits_Buy;
double Takeprofitsell=(hp-MarketInfo(sym,MODE_BID))/Point/10*Step_TakeProfits_Sell;

double closeh1=iClose(Symbol(),0,1);

double low1=iLow(sym,PERIOD_D1,1);
double low0=iLow(sym,PERIOD_D1,0);

double high1=iHigh(sym,PERIOD_D1,1);
double high0=iHigh(sym,PERIOD_D1,0);

لكن هناك دالتين لم تقوم بتعديلهم اخي حسن
وهما التريلينج ستوب والاوردر كونت

ارجو تعديلهما لان ظهرلي اخطاء عند التعديل


void MoveTrailingStop(string symbol)
{
bool s,mod;
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int tk=OrderTicket(),
ot=OrderType(),
mn=OrderMagicNumber();
double op=OrderOpenPrice(),
sl=OrderStopLoss(),
tp=OrderTakeProfit();
if(sy==symbol&&mn==MagicNo&&ot<=OP_SELL)
{
if(ot==OP_BUY)
{
if(NormalizeDouble(MarketInfo(symbol,MODE_ASK),Mar ketInfo(symbol,MODE_DIGITS))>NormalizeDouble(op+TrailingStop,MarketInfo(symbol, MODE_DIGITS))
{
if((NormalizeDouble(sl,MarketInfo(symbol,MODE_DIGI TS))<NormalizeDouble(MarketInfo(symbol,MODE_BID)-TrailingStop,MarketInfo(symbol,MODE_DIGITS)))||sl= =0)
{
mod=OrderModify(tk,op,NormalizeDouble(MarketInfo(s ymbol,MODE_BID))-TrailingStop,MarketInfo(symbol,MODE_DIGITS))),tp,0 ,Blue);
}
}
}
else
{
if(NormalizeDouble(Bid,Digits)<NormalizeDouble(op-TrailingStop,Digits))
{
if((NormalizeDouble(sl,Digits)>(NormalizeDouble(Ask+TrailingStop,Digits)))||sl==0 )
{
mod=OrderModify(tk,op,NormalizeDouble(Ask+Trailing Stop,Digits),tp,0,Red);
}
}
}
}
}
}

int Orderscnt(int type=-1)
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol()&&MagicNo==OrderMagicNumber())
{
if(OrderType()==type||type==-1)
{
cnt++;
}
}
}
}
return(cnt);
}

طيب وماذا عن الدالة OnInit()
الن نقوم بتعديل ما بداخلها هي الاخرى ؟
انا عدلت فيها
مش عارف كده صح ولا انا بألف برمجة ! ههههه


int OnInit()
{
PrintInfoToChart();


string sym=suffix+Pairs_Name+perfix;
if(MarketInfo(sym,MODE_MINLOT)<0.1)Lot_Decimal=2;else Lot_Decimal=1;
if(MarketInfo(sym,MODE_DIGITS)==5||MarketInfo(sym, MODE_DIGITS)==3)Q=10;else Q=1;
if(MarketInfo(sym,MODE_DIGITS)<4)point=0.01;else point=0.0001;
return(INIT_SUCCEEDED);
}

اعذرني فأنا ما زلت مبتديء واتعلم شيئاً فشيئاً بالممارسة لان المراجع الموجودة قديمة ومشتتة

من خلال الشرح بمشاركتي السابقة بامكانك تعديل كل الدوال التي تريد استخدامها، فقط اجعلها بدلالة اسم الزوج ثم تضع شروطها ضمن حلقة الأزواج for
أما بالنسبة لقيمة النقطة ستقوم بحدف كل شروطها التي بدالة البداية OnInit وتستخدمها كدالة خارجية بدلالة اسم الزوج كالتالي:


void Points(string symbol)
{
if(MarketInfo(symbol,MODE_DIGITS)==5||MarketInfo(s ymbol,MODE_DIGITS)==3)Q=10;else Q=1;
if(MarketInfo(symbol,MODE_DIGITS)<4)point=0.01;else point=0.0001;
}


ثم اي سطور بين لامتين { } به استخدام للـ point أو Q ستقوم بالبداية وضع الدالة Points مثال


if(LastSignal(sym)==-1&&ch(sym,0,1)!=0)//low0<low1&&
{
if(LastCandleOrders(sym)==0)
{
Points(sym);
if(Stoploss!=0){double SLb=lp-Stoploss*point;}else SLb=0;
if(Takeprofitbuy!=0){double TPb=MarketInfo(sym,MODE_ASK)+Takeprofitbuy*point;} else TPb=0;
bool b=OrderSend(sym,OP_BUY,NormalizeDouble(lotsbuy,Lot _Decimal),MarketInfo(sym,MODE_ASK),3*Q,SLb,TPb,"aymoon",MagicNo,0,Blue);
}
}

zied78
09-06-2018, 04:55 AM
السلام عليكم استاذ حسن
كيف ابحث عن كائن مرسوم على عدة ازواج مثلا لو رسمت مستطيل يحدد الدعوم والمقاومات لأزواج مختلفة كيف يمكنني البحث عليها لجلب القيم عن طريق دالة ObjectGet لتلك الرسومات.

sabil
09-06-2018, 05:50 AM
من خلال الشرح بمشاركتي السابقة بامكانك تعديل كل الدوال التي تريد استخدامها، فقط اجعلها بدلالة اسم الزوج ثم تضع شروطها ضمن حلقة الأزواج for
أما بالنسبة لقيمة النقطة ستقوم بحدف كل شروطها التي بدالة البداية OnInit وتستخدمها كدالة خارجية بدلالة اسم الزوج كالتالي:


void Points(string symbol)
{
if(MarketInfo(symbol,MODE_DIGITS)==5||MarketInfo(s ymbol,MODE_DIGITS)==3)Q=10;else Q=1;
if(MarketInfo(symbol,MODE_DIGITS)<4)point=0.01;else point=0.0001;
}


ثم اي سطور بين لامتين { } به استخدام للـ point أو Q ستقوم بالبداية وضع الدالة Points مثال


if(LastSignal(sym)==-1&&ch(sym,0,1)!=0)//low0<low1&&
{
if(LastCandleOrders(sym)==0)
{
Points(sym);
if(Stoploss!=0){double SLb=lp-Stoploss*point;}else SLb=0;
if(Takeprofitbuy!=0){double TPb=MarketInfo(sym,MODE_ASK)+Takeprofitbuy*point;} else TPb=0;
bool b=OrderSend(sym,OP_BUY,NormalizeDouble(lotsbuy,Lot _Decimal),MarketInfo(sym,MODE_ASK),3*Q,SLb,TPb,"aymoon",MagicNo,0,Blue);
}
}


شكراً كتير اخي حسن
قمت بعمل التعديلات اللازمة واصبح الاكسبرت جاهز للعمل عند افتتاح السوق للتجربة

لكن فيه نقطة صغيرة غير متأكد منها والخاصة بخانة اللوت
قمت بتعريفها خارج الدالة بالشكل التالي
ولم يعطيني اخطاء بعد كومبايل

int lotmanage(string symbol)
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(MarketInfo(symbol,MODE_MINLOT)<0.1)Lot_Decimal=2;else Lot_Decimal=1;
}
return(0);
}

وداخل الدالة


bool b=OrderSend(sym,OP_BUY,NormalizeDouble(lotsbuy,lot manage(sym))

كده تمام ولا فيه حاجة غلط؟

kira-h
09-06-2018, 08:34 PM
شكراً كتير اخي حسن
قمت بعمل التعديلات اللازمة واصبح الاكسبرت جاهز للعمل عند افتتاح السوق للتجربة

لكن فيه نقطة صغيرة غير متأكد منها والخاصة بخانة اللوت
قمت بتعريفها خارج الدالة بالشكل التالي
ولم يعطيني اخطاء بعد كومبايل

int lotmanage(string symbol)
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(MarketInfo(symbol,MODE_MINLOT)<0.1)Lot_Decimal=2;else Lot_Decimal=1;
}
return(0);
}

وداخل الدالة


bool b=OrderSend(sym,OP_BUY,NormalizeDouble(lotsbuy,lot manage(sym))

كده تمام ولا فيه حاجة غلط؟
تمام صحيح

zied78
09-06-2018, 10:46 PM
السلام عليكم استاذ حسن
كيف ابحث عن كائن مرسوم على عدة ازواج مثلا لو رسمت مستطيل يحدد الدعوم والمقاومات لأزواج مختلفة كيف يمكنني البحث عليها لجلب القيم عن طريق دالة
ObjectGet لتلك الرسومات.

مثال لهذا الكود يبحث على الشارت الحالى ما اريده هو البحث في عدة شارتات لأزواج مختلفة .

[*=left]
string rec="Rectangle";
for( int m=-0; m<ObjectsTotal(); m++){
if(StringFind(ObjectName(int(m)),rec,0)==0){
string ZONE=StringSubstr(ObjectName(int(m)),0,0); double h = NormalizeDouble(ObjectGet(ZONE,OBJPROP_PRICE1),5);
double l = NormalizeDouble(ObjectGet(ZONE,OBJPROP_PRICE2),5); }}

kira-h
10-06-2018, 06:02 AM
مثال لهذا الكود يبحث على الشارت الحالى ما اريده هو البحث في عدة شارتات لأزواج مختلفة .

[*=left]
string rec="Rectangle";
for( int m=-0; m<ObjectsTotal(); m++){
if(StringFind(ObjectName(int(m)),rec,0)==0){
string ZONE=StringSubstr(ObjectName(int(m)),0,0); double h = NormalizeDouble(ObjectGet(ZONE,OBJPROP_PRICE1),5);
double l = NormalizeDouble(ObjectGet(ZONE,OBJPROP_PRICE2),5); }}


وعليكم السلام
استخدم حلقة للبحث بالشارتات المفتوحة
مثال


for(ulong ID = ChartFirst(); ID != -1; ID = ChartNext(ID))


ثم تبحث عن الاوبجكت بدلالة رقم الشارت
مثال

for (int m = 0; m < ObjectsTotal(ID,0,-1); m++)

Mohamadsabry2040
10-06-2018, 08:56 AM
ارجو من خبراء الفوركس ان يجيبوني قرات موضوع عن اكسبيرت منذ عام 2009و اطلعت علي الباكتيست وعندما قمت بعملت باكتيست .وجدت ان لا يعمل نفس الباكتيست في نفس الوقت الماضي اريد اعرف ماهي المشكله؟ هل تتوقعين مثلا عدم توافق الاكسبيرت مع المنصه بسبب التحديثات علي الميتاتريدر حتي الان ارجو الرد باسرع وقت وانصحوني بالحل لاني اريد العمل بالاكسبيرت

zied78
10-06-2018, 03:45 PM
وعليكم السلام
استخدم حلقة للبحث بالشارتات المفتوحة
مثال


for(ulong ID = ChartFirst(); ID != -1; ID = ChartNext(ID))


ثم تبحث عن الاوبجكت بدلالة رقم الشارت
مثال

for (int m = 0; m < ObjectsTotal(ID,0,-1); m++)

أخي الكريم للأسف لم أتمكن من ايجاد الخطأ في الكود.

ulong ID;string rec="Rectangle";
for(ID = ChartFirst(); ID != -1; ID = ChartNext(ID))
{
for( int m=-0; m<ObjectsTotal(ID,0,-1); m++)
{
if(StringFind(ObjectName(ID,m),rec,0)==0)
{
string ZONE=StringSubstr(ObjectName(ID,m),0,0);
double h = NormalizeDouble(ObjectGet(ZONE,OBJPROP_PRICE1),5);
double l = NormalizeDouble(ObjectGet(ZONE,OBJPROP_PRICE2),5);
Print(l+" "+h+" "+ID);
}}}











[*=center]7774

Mohamadsabry2040
10-06-2018, 07:13 PM
ياجماعه محتاجه رد من خبراء الاكسبيرتات عاوز اشغل اكسبيرت من 2009ليتوافق مع الميتاتريدر ما هو الحل ؟

kira-h
10-06-2018, 09:41 PM
ياجماعه محتاجه رد من خبراء الاكسبيرتات عاوز اشغل اكسبيرت من 2009ليتوافق مع الميتاتريدر ما هو الحل ؟
يجب تحديث الكود

zied78
10-06-2018, 11:44 PM
أخي الكريم للأسف لم أتمكن من ايجاد الخطأ في الكود.

ulong ID;string rec="Rectangle";
for(ID = ChartFirst(); ID != -1; ID = ChartNext(ID))
{
for( int m=-0; m<ObjectsTotal(ID,0,-1); m++)
{
if(StringFind(ObjectName(ID,m),rec,0)==0)
{
string ZONE=StringSubstr(ObjectName(ID,m),0,0);
double h = NormalizeDouble(ObjectGet(ZONE,OBJPROP_PRICE1),5);
double l = NormalizeDouble(ObjectGet(ZONE,OBJPROP_PRICE2),5);
Print(l+" "+h+" "+ID);
}}}











[*=center]7774



بصراحة زاد تعقد الأمر
:sulkiness:


7775

Mohamadsabry2040
12-06-2018, 08:20 AM
سلام عليكم و رحمه الله خبراء برمجه الاكسبيرتات الكرام هذا الاكسبيرت تم برمجته منذ 2009 و جربته الان ولا يعمل بنفس الكفاءه ارجو تحديث الاكواد حتي تتناسب مع التحديثات في لغه mql4 مع العلم اني قمت بعمل باكتيست بنفس الفتره التي عمل بها باكتيست و لايعطي نفس النتائج السابقه وجزاكم الله خيرا علي علمكم

kira-h
12-06-2018, 08:16 PM
سلام عليكم و رحمه الله خبراء برمجه الاكسبيرتات الكرام هذا الاكسبيرت تم برمجته منذ 2009 و جربته الان ولا يعمل بنفس الكفاءه ارجو تحديث الاكواد حتي تتناسب مع التحديثات في لغه mql4 مع العلم اني قمت بعمل باكتيست بنفس الفتره التي عمل بها باكتيست و لايعطي نفس النتائج السابقه وجزاكم الله خيرا علي علمكم
وعليكم السلام
مرفق الاكسبيرت

bahoma31
12-06-2018, 09:20 PM
السلام عليكم أستاذ حسن

اذا كان لدي الكثير من صفقات المفتوحة كيف استخرج سعر افتتاح أول صفقة

kira-h
12-06-2018, 10:05 PM
السلام عليكم أستاذ حسن

اذا كان لدي الكثير من صفقات المفتوحة كيف استخرج سعر افتتاح أول صفقة
وعليكم السلام


double FirstPrice()
{
for(int i=0;i<OrdersTotal();i++)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
datetime tm=OrderOpenTime();
int mn=OrderMagicNumber();
if(sy==Symbol()&&mn==MagicNo)
{
return(OrderOpenPrice());
}
}
return(0);
}

sabil
12-06-2018, 10:50 PM
تمام صحيح

ياراجل مش تقولي اني بألف برمجة هههههه
بمزح معك
مخدتش بالي ان الدالة بتحسب اقل لوت ع الزوج وبالتالي مش محتاج احسبها ع كل زوج
رجعته تاني واشتغل تمام الحمد لله
المهم حاليا الاكسبرت شغال تمام ماعدا نقطة صغير مش بيفتح صفقات نهائي على ازواج الين
اظن بسبب تلك الدالة

void Points(string symbol)
{
if(MarketInfo(symbol,MODE_DIGITS)==5||MarketInfo(s ymbol,MODE_DIGITS)==3)Q=10;else Q=1;
if(MarketInfo(symbol,MODE_DIGITS)<4)point=0.01;else point=0.0001;
}
ارجو التعديل

bahoma31
12-06-2018, 11:42 PM
وعليكم السلام


double FirstPrice()
{

'
الف شكر ورمضان كريم ياغالي
for(int i=0;i<OrdersTotal();i++)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
datetime tm=OrderOpenTime();
int mn=OrderMagicNumber();
if(sy==Symbol()&&mn==MagicNo)
{
return(OrderOpenPrice());
}
}
return(0);
}







الف شكر ورمضان كريم يا غالي

kira-h
13-06-2018, 03:15 AM
ياراجل مش تقولي اني بألف برمجة هههههه
بمزح معك
مخدتش بالي ان الدالة بتحسب اقل لوت ع الزوج وبالتالي مش محتاج احسبها ع كل زوج
رجعته تاني واشتغل تمام الحمد لله
المهم حاليا الاكسبرت شغال تمام ماعدا نقطة صغير مش بيفتح صفقات نهائي على ازواج الين
اظن بسبب تلك الدالة

void Points(string symbol)
{
if(MarketInfo(symbol,MODE_DIGITS)==5||MarketInfo(s ymbol,MODE_DIGITS)==3)Q=10;else Q=1;
if(MarketInfo(symbol,MODE_DIGITS)<4)point=0.01;else point=0.0001;
}
ارجو التعديل
الدالة سليمة ويجب ان يفتح على ازواج الين عادي
لهذا راجع خانة الجورنال لمعرفة السبب الحقيقي للخطأ

kira-h
13-06-2018, 03:16 AM
الف شكر ورمضان كريم يا غالي
بالتوفيق إن شاء الله

Mohamadsabry2040
13-06-2018, 01:41 PM
وعليكم السلام
مرفق الاكسبيرت
اخي الكريم اشكرك مقدما المهم عملت مقارنه بين نتائج الاكسبيرت لمده سنتين بين الاكسبيرت القديم و الاكسبيرت التي تفضلت بتحديث اكواده علي نفس الفتره كانت النتايج مختلفه كليا وسارفق صوره المقارنه بين الاكسيرتين

kira-h
13-06-2018, 07:10 PM
اخي الكريم اشكرك مقدما المهم عملت مقارنه بين نتائج الاكسبيرت لمده سنتين بين الاكسبيرت القديم و الاكسبيرت التي تفضلت بتحديث اكواده علي نفس الفتره كانت النتايج مختلفه كليا وسارفق صوره المقارنه بين الاكسيرتين

العفو اخي
تحديث الكود ليس له علاقة باختلاف النتائج
وغالبا الاختلاف في الشروط او الاعدادات

Mohamadsabry2040
14-06-2018, 09:33 AM
العفو اخي
تحديث الكود ليس له علاقة باختلاف النتائج
وغالبا الاختلاف في الشروط او الاعدادات
من خلال خبرتك في برمجه الاكسبيرتات ماذا تتوقع اين المشكله مع العلم ان نتائج المقارنه متطابقه بالارقام حتي سعر الدخول و التيك بروفيت و الاستوب الا الاختلاف الجوهري هو في الربح منتظر ردك

kira-h
14-06-2018, 07:53 PM
من خلال خبرتك في برمجه الاكسبيرتات ماذا تتوقع اين المشكله مع العلم ان نتائج المقارنه متطابقه بالارقام حتي سعر الدخول و التيك بروفيت و الاستوب الا الاختلاف الجوهري هو في الربح منتظر ردك
ردي السابق واضح أخي الكريم

bahoma31
14-06-2018, 08:59 PM
السلام عليكم أستاذ حسن
هذه الدالة اخدتها من عندك

مثلا عندما يكون لي عشرة صفقات الشراء مفتوحة وتتحق شروط اغلقها لا تنغلق كلها بل يبقى 3 او 4 صفقات مفتوحة



void CloseOrder(int type=-1)
{
bool select,close,del;
for(int i=OrdersTotal()-1;i>=0;i--)
{
select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrdersTotal()>0&&OrderSymbol()==Symbol()&&OrderMagicNumber()==magjic_nember)
{
if(OrderType()==type||type==-1)
{
if(OrderType()==OP_BUY){close=OrderClose(OrderTick et(),OrderLots(),NormalizeDouble(Bid,Digits),3);}
if(OrderType()==OP_SELL){close=OrderClose(OrderTic ket(),OrderLots(),NormalizeDouble(Ask,Digits),3);}
if(OrderType()>OP_SELL){del=OrderDelete(OrderTicket());}
}
}
}
}

sabil
16-06-2018, 05:29 AM
الدالة سليمة ويجب ان يفتح على ازواج الين عادي
لهذا راجع خانة الجورنال لمعرفة السبب الحقيقي للخطأ

لا يوجد شيء في الجورنال بخصوص المشكلة
تم ارفاق الاكسبرت
كل شيء يعمل تمام ماعدا ازواج الين
ارجو المراجعة ..

kira-h
16-06-2018, 05:41 PM
لا يوجد شيء في الجورنال بخصوص المشكلة
تم ارفاق الاكسبرت
كل شيء يعمل تمام ماعدا ازواج الين
ارجو المراجعة ..

مرفق الاكسبيرت

sabil
22-06-2018, 07:30 AM
مرفق الاكسبيرت

للاسف ما زال لا يعمل على ازواج الين وتأكدت من توفر شروط الدخول
مش عارف الغلط فين !!

kira-h
22-06-2018, 05:49 PM
للاسف ما زال لا يعمل على ازواج الين وتأكدت من توفر شروط الدخول
مش عارف الغلط فين !!

استخدم شروط بسيطة لتسريع الاختبار والتأكد من عمل حلقة الأزواج كما فعلت بالصورة المرفقة ومرفق الاكسبيرت التجريبي كمثال
لا يوجد أخطاء من ناحية فتح الصفقات على ازواج الين
إذن راجع شروط فتح الصفقات وطريقة حساب الهدف والوقف، وستجد نوع الخطأ بالجورنال
أو ربما الشروط لم تتحقق
7900

sabil
23-06-2018, 08:07 AM
استخدم شروط بسيطة لتسريع الاختبار والتأكد من عمل حلقة الأزواج كما فعلت بالصورة المرفقة ومرفق الاكسبيرت التجريبي كمثال
لا يوجد أخطاء من ناحية فتح الصفقات على ازواج الين
إذن راجع شروط فتح الصفقات وطريقة حساب الهدف والوقف، وستجد نوع الخطأ بالجورنال
أو ربما الشروط لم تتحقق
7900

ما انا غيرت ف شروط الدخول وخليتها على نوع الشمعة صاعدة او هابطة لكن كانت نفس المشكلة

sabil
24-06-2018, 05:25 AM
عايز اقول هدف الشراء يكون ضعف المسافة بين اخر صفقة شراء مع اخر صفقة بيع
وهدف البيع كذلك
اما الاستوب للصفقتين يكون مكان الهدف بالتبادل
تمام كده؟

انا بقى عملتها ف دالة تعديل الهدف والخسارة لكن لا تعمل جيدا ولا اعرف اين يكون الخطأ
ارجو المراجعة

void OrdersModify()
{
bool s,m;
double SL,TP;
double Takeprofit_Sell_Buy=(LastOrderCurrent("OpenPrice",OP_BUY)-LastOrderCurrent("OpenPrice",OP_SELL))*2;
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
double op=OrderOpenPrice(),
sl=OrderStopLoss(),
tp=OrderTakeProfit();
int tk=OrderTicket(),
ty=OrderType(),
mn=OrderMagicNumber() ;

if(sy==Symbol()&&mn==MagicNo)
{
if(ty==OP_SELL)
{
if(Stoploss_MP!=0)SL=LastOrderCurrent("OpenPrice",OP_BUY)+Takeprofit_Sell_Buy+Stoploss_MP*point;els e SL=0;
if(Takeprofit_Sell_Buy!=0)TP=LastOrderCurrent("OpenPrice",OP_SELL)-Takeprofit_Sell_Buy*point;else TP=0;
if((sl!=SL)||(tp!=TP))
{
m=OrderModify(tk,op,SL,TP,0,Red);
}
}
if(ty==OP_BUY)
{
if(Stoploss_MP!=0)SL=LastOrderCurrent("OpenPrice",OP_SELL)-Takeprofit_Sell_Buy-Stoploss_MP*point;else SL=0;
if(Takeprofit_Sell_Buy!=0)TP=LastOrderCurrent("OpenPrice",OP_BUY)+Takeprofit_Sell_Buy*point;else TP=0;
if((sl!=SL)||(tp!=TP))
{
m=OrderModify(tk,op,SL,TP,0,Blue);
}
}
}
}
}

mahmoud1111
24-06-2018, 03:42 PM
كود برمجيالسلام عليكم ورحمة الله وبركاتهلو سمحت ممكن كود لو تحقق الهدف يتم ايقاف عمل الاكسبيرت دقيقة ثم يعمل من جديدشكرا لكم

kira-h
24-06-2018, 10:29 PM
كود برمجيالسلام عليكم ورحمة الله وبركاتهلو سمحت ممكن كود لو تحقق الهدف يتم ايقاف عمل الاكسبيرت دقيقة ثم يعمل من جديدشكرا لكم

وعليكم السلام
ستقوم بعمل دالة تستخرج توقيت آخر صفقة مغلقة كالتالي:


datetime LastClosedTime()
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNo)
{
return(OrderCloseTime());
}
}
return(0);
}


ثم تضع الشرط التالي قبل شروط فتح الصفقات كالتالي :

if(TimeCurrent()<=LastClosedTime()+5*60)return;

kira-h
24-06-2018, 10:39 PM
عايز اقول هدف الشراء يكون ضعف المسافة بين اخر صفقة شراء مع اخر صفقة بيع
وهدف البيع كذلك
اما الاستوب للصفقتين يكون مكان الهدف بالتبادل
تمام كده؟

انا بقى عملتها ف دالة تعديل الهدف والخسارة لكن لا تعمل جيدا ولا اعرف اين يكون الخطأ
ارجو المراجعة

void OrdersModify()
{
bool s,m;
double SL,TP;
double Takeprofit_Sell_Buy=(LastOrderCurrent("OpenPrice",OP_BUY)-LastOrderCurrent("OpenPrice",OP_SELL))*2;
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
double op=OrderOpenPrice(),
sl=OrderStopLoss(),
tp=OrderTakeProfit();
int tk=OrderTicket(),
ty=OrderType(),
mn=OrderMagicNumber() ;

if(sy==Symbol()&&mn==MagicNo)
{
if(ty==OP_SELL)
{
if(Stoploss_MP!=0)SL=LastOrderCurrent("OpenPrice",OP_BUY)+Takeprofit_Sell_Buy+Stoploss_MP*point;els e SL=0;
if(Takeprofit_Sell_Buy!=0)TP=LastOrderCurrent("OpenPrice",OP_SELL)-Takeprofit_Sell_Buy*point;else TP=0;
if((sl!=SL)||(tp!=TP))
{
m=OrderModify(tk,op,SL,TP,0,Red);
}
}
if(ty==OP_BUY)
{
if(Stoploss_MP!=0)SL=LastOrderCurrent("OpenPrice",OP_SELL)-Takeprofit_Sell_Buy-Stoploss_MP*point;else SL=0;
if(Takeprofit_Sell_Buy!=0)TP=LastOrderCurrent("OpenPrice",OP_BUY)+Takeprofit_Sell_Buy*point;else TP=0;
if((sl!=SL)||(tp!=TP))
{
m=OrderModify(tk,op,SL,TP,0,Blue);
}
}
}
}
}


السلام عليكم
جرب الدالة التالية


void OrdersModify()
{
bool s,m;
double SL,TP;
double Takeprofit_Sell_Buy=MathAbs(LastOrderCurrent("OpenPrice",OP_BUY)-LastOrderCurrent("OpenPrice",OP_SELL))*2;//استخدم وظيفة القيمة المطلقة للناتج لأنه قد يكون سالب
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
double op=OrderOpenPrice(),
sl=OrderStopLoss(),
tp=OrderTakeProfit();
int tk=OrderTicket(),
ty=OrderType(),
mn=OrderMagicNumber();

if(sy==Symbol()&&mn==MagicNo)
{
if(ty==OP_SELL)
{
SL=LastOrderCurrent("OpenPrice",OP_BUY)+Takeprofit_Sell_Buy;
TP=LastOrderCurrent("OpenPrice",OP_SELL)-Takeprofit_Sell_Buy;
if(NormalizeDouble(sl,Digits)!=NormalizeDouble(SL, Digits)||NormalizeDouble(tp,Digits)!=NormalizeDoub le(TP,Digits))
{
m=OrderModify(tk,op,SL,TP,0,Red);
}
}
if(ty==OP_BUY)
{
SL=LastOrderCurrent("OpenPrice",OP_SELL)-Takeprofit_Sell_Buy;
TP=LastOrderCurrent("OpenPrice",OP_BUY)+Takeprofit_Sell_Buy;
if(NormalizeDouble(sl,Digits)!=NormalizeDouble(SL, Digits)||NormalizeDouble(tp,Digits)!=NormalizeDoub le(TP,Digits))
{
m=OrderModify(tk,op,SL,TP,0,Blue);
}
}
}
}
}

sabil
24-06-2018, 11:46 PM
السلام عليكم
جرب الدالة التالية


void OrdersModify()
{
bool s,m;
double SL,TP;
double Takeprofit_Sell_Buy=MathAbs(LastOrderCurrent("OpenPrice",OP_BUY)-LastOrderCurrent("OpenPrice",OP_SELL))*2;//استخدم وظيفة القيمة المطلقة للناتج لأنه قد يكون سالب
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
double op=OrderOpenPrice(),
sl=OrderStopLoss(),
tp=OrderTakeProfit();
int tk=OrderTicket(),
ty=OrderType(),
mn=OrderMagicNumber();

if(sy==Symbol()&&mn==MagicNo)
{
if(ty==OP_SELL)
{
SL=LastOrderCurrent("OpenPrice",OP_BUY)+Takeprofit_Sell_Buy;
TP=LastOrderCurrent("OpenPrice",OP_SELL)-Takeprofit_Sell_Buy;
if(NormalizeDouble(sl,Digits)!=NormalizeDouble(SL, Digits)||NormalizeDouble(tp,Digits)!=NormalizeDoub le(TP,Digits))
{
m=OrderModify(tk,op,SL,TP,0,Red);
}
}
if(ty==OP_BUY)
{
SL=LastOrderCurrent("OpenPrice",OP_SELL)-Takeprofit_Sell_Buy;
TP=LastOrderCurrent("OpenPrice",OP_BUY)+Takeprofit_Sell_Buy;
if(NormalizeDouble(sl,Digits)!=NormalizeDouble(SL, Digits)||NormalizeDouble(tp,Digits)!=NormalizeDoub le(TP,Digits))
{
m=OrderModify(tk,op,SL,TP,0,Blue);
}
}
}
}
}


جميل
الف شكر ياغالي شغالة تمام
بس انا عايزه يحسب فرق الاسبريد عند وضع الاستوب عشان ميقفلش الشراء قبل البيع مثلا والعكس لان دا حصل ف الباكتيست حالاً

عشان كده كنت حاطط متغير ال Stoploss_MP عشان اعمل فرق بين البروفيت والاستوب

mahmoud1111
25-06-2018, 09:53 PM
شكرا حبيبيلكن ممكن توضح معني 5*60

kira-h
26-06-2018, 07:05 PM
جميل
الف شكر ياغالي شغالة تمام
بس انا عايزه يحسب فرق الاسبريد عند وضع الاستوب عشان ميقفلش الشراء قبل البيع مثلا والعكس لان دا حصل ف الباكتيست حالاً

عشان كده كنت حاطط متغير ال Stoploss_MP عشان اعمل فرق بين البروفيت والاستوب
قم باضافتها
مثال

SL=LastOrderCurrent("OpenPrice",OP_BUY)+Takeprofit_Sell_Buy+Stoploss_MP*point;

kira-h
26-06-2018, 07:06 PM
شكرا حبيبيلكن ممكن توضح معني 5*60
60 ثانية ضرب 5 = 300 ثانية = 5 دقائق

Coder007
26-06-2018, 07:39 PM
salam
how can i set Fibonacci on take profit

mahmoud1111
26-06-2018, 09:08 PM
حقيقي انت معلم ومنك نتعلم
بارك الله فيك

kira-h
27-06-2018, 04:36 PM
salam
how can i set Fibonacci on take profit

وعليكم السلام
مبدأ عمل الفيبوناتشي سهل
فمثلا مستوى 23.6 المقصود به 23.6% من عدد نقاط الفرق بين القمه والقاع

kira-h
27-06-2018, 04:36 PM
حقيقي انت معلم ومنك نتعلم
بارك الله فيك
وإياك اخي الكريم

sabil
30-06-2018, 02:14 PM
قم باضافتها
مثال

SL=LastOrderCurrent("OpenPrice",OP_BUY)+Takeprofit_Sell_Buy+Stoploss_MP*point;

شكرا يامستر
بقولك عايز دالة تفتح الصفقة بلوت يساوي مجموع لوتات الصفقات المفتوحة
يعني مثلا عندنا 3 صفقات شراء كل واحدة منهم بلوت 0.01
ولا يوجد لدينا صفقات بيع ثم ظهرت اشارة بيع هنا الاكسبرت يفتح الصفقة بلوت 0.03 اللي هو مجموع لوتات صفقات الشراء
وهكذا ..
ولو متعادلين او اللوت الاساسي للصفقة الجديدة هيكون مجموعه مع المفتوحة اكبر من مجموع لوتات الصفقة المعاكسة
هنا يفتح باللوت الاساسي
فهل يوجد دالة كهذه؟

kira-h
30-06-2018, 06:00 PM
شكرا يامستر
بقولك عايز دالة تفتح الصفقة بلوت يساوي مجموع لوتات الصفقات المفتوحة
يعني مثلا عندنا 3 صفقات شراء كل واحدة منهم بلوت 0.01
ولا يوجد لدينا صفقات بيع ثم ظهرت اشارة بيع هنا الاكسبرت يفتح الصفقة بلوت 0.03 اللي هو مجموع لوتات صفقات الشراء
وهكذا ..
ولو متعادلين او اللوت الاساسي للصفقة الجديدة هيكون مجموعه مع المفتوحة اكبر من مجموع لوتات الصفقة المعاكسة
هنا يفتح باللوت الاساسي
فهل يوجد دالة كهذه؟
دالة اجمالي أحجام العقود للصفقات المفتوحة حسب النوع كالتالي:


double Total_Lots(int type=-1)
{
double los;
for(int i=0;i<OrdersTotal();i++)
{
bool s=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ot=OrderType();
double lo=OrderLots();
if(sy==Symbol()&&mn==MagicNo)
{
if(ot==type||type==-1)
{
los+=lo;
}
}
}
return(los);
}


وبهذا يمكنك بناء الشروط

sabil
30-06-2018, 09:56 PM
دالة اجمالي أحجام العقود للصفقات المفتوحة حسب النوع كالتالي:


double Total_Lots(int type=-1)
{
double los;
for(int i=0;i<OrdersTotal();i++)
{
bool s=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ot=OrderType();
double lo=OrderLots();
if(sy==Symbol()&&mn==MagicNo)
{
if(ot==type||type==-1)
{
los+=lo;
}
}
}
return(los);
}


وبهذا يمكنك بناء الشروط

طيب كده صح؟


double NewLots;

if(Total_Lots(OP_BUY)<Total_Lots(OP_SELL))NewLots=Total_Lots(OP_SELL)-Total_Lots(OP_BUY);
if(Total_Lots(OP_SELL)<Total_Lots(OP_BUY))NewLots=Total_Lots(OP_BUY)-Total_Lots(OP_SELL);
if(Orderscnt()==0)NewLots=Lots;

Waddah
01-07-2018, 11:40 AM
السلام عليكم أستاذ ...عندي سؤالين لو سمحت :
1- كيف أحسب متوسط إغلاق شموع الأربع ساعات لليوم السابق ( مجموع إغلاق 6 شموع تقسيم 6 - لكن لليوم السابق ؟)
2- كيف أضع ليبل فوق خط أفقي مثلا أريد كتابة Daily Pivot فوق الخط مزاح لأقصى يمين الشاشة

مع جزيل الشكر

kira-h
01-07-2018, 05:59 PM
طيب كده صح؟


double NewLots;

if(Total_Lots(OP_BUY)<Total_Lots(OP_SELL))NewLots=Total_Lots(OP_SELL)-Total_Lots(OP_BUY);
if(Total_Lots(OP_SELL)<Total_Lots(OP_BUY))NewLots=Total_Lots(OP_BUY)-Total_Lots(OP_SELL);
if(Orderscnt()==0)NewLots=Lots;

جرب بالباكتيست وشوف إذا نتيجة المعادلة متوافقة مع ما تريد

kira-h
01-07-2018, 06:34 PM
السلام عليكم أستاذ ...عندي سؤالين لو سمحت :
1- كيف أحسب متوسط إغلاق شموع الأربع ساعات لليوم السابق ( مجموع إغلاق 6 شموع تقسيم 6 - لكن لليوم السابق ؟)
2- كيف أضع ليبل فوق خط أفقي مثلا أريد كتابة Daily Pivot فوق الخط مزاح لأقصى يمين الشاشة

مع جزيل الشكر

وعليكم السلام
1-
ستقوم بعمل دالة خارجية لسعر اغلاق شمعة الأربع ساعات بدلالة رقم الشمعة كالتالي:


double c(int bar)
{
return(iClose(Symbol(),240,bar));
}


ثم بداخل الدالة الرئيسية نستخرج رقم أول شمعة أربع ساعات لليوم الحالي كالتالي:


int b=iBarShift(Symbol(),240,iTime(Symbol(),1440,0));


ومنه نحسب متوسط اغلاق الشموع الستة لليوم السابق كالتالي :


double AvCloses=NormalizeDouble((c(b+1)+c(b+2)+c(b+3)+c(b +4)+c(b+5)+c(b+6))/6,Digits);


2-
مثلا


double piv=AvCloses;//نفترض ان البيفوت هو متوسط الاغلاقات السابقة
double r1=piv+200*Point;//سعر اول مقاومة بإضافة 20 نقطة لسعر البيفوت
double s1=piv-200*Point;//سعر اول دعم بخصم 20 نقطة لسعر البيفوت

mahmoud1111
04-07-2018, 08:57 PM
السلام عليكم
لو سمحت اخي الكريم
ممكن دالة انه لو كانت الصفقة شغالة وكانت عاكسة ب 30 نقطة يقوم الاكسبيرت بفتح صفقة جديدة بالشروط الحالية لفتح الصفقة

kira-h
05-07-2018, 08:24 PM
السلام عليكم
لو سمحت اخي الكريم
ممكن دالة انه لو كانت الصفقة شغالة وكانت عاكسة ب 30 نقطة يقوم الاكسبيرت بفتح صفقة جديدة بالشروط الحالية لفتح الصفقة

وعليكم السلام
ستقوم بعمل دالة لمعرفة سعر آخر صفقة مفعلة بدلالة نوعها كالتالي:


double LastPrice(int type)
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ty=OrderType();
double op=OrderOpenPrice();
if(sy==Symbol()&&mn==MagicNo)
{
if(ty==type)
{
return(op);
}
}
}
return(0);
}


ودالة عدد الصفقات المفتوحة بدلالة النوع كالتالي:


int Orderscnt(int type=-1)
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol()&&MagicNo==OrderMagicNumber()&&(OrderType()==type||type==-1))
{
cnt++;
}
}
}
return(cnt);
}


ثم يكون شرط الدخول بصفقة تبريد شراء كالتالي :

if(Orderscnt(OP_BUY)>0&&Ask<=LastPrice(OP_BUY)-300*Point)//open buy

وتبريد بيع كالتالي :

if(Orderscnt(OP_SELL)>0&&Bid>=LastPrice(OP_SELL)+300*Point)//open sell

moath222
05-07-2018, 09:04 PM
اخي الفاضل
حسب الاكسبيرت المرفق اريد ان يفتح صفقه بيع فقط اذا كان اغلاق شمعه 15 دقيقه رتبه 1 اقل من ادني شمعه 60 رتبه 1
واريد ان اضيف تنبيه للاكسبيرت حيث يعطي تنبيه خمس تنبيهات او اكثر عند تحقق فرصه البيع لا اعرف اذا كان الشغل صحيح ولا اعرف كيف اضافه داله التنبيه لخبرتي القليله بذلك
اما الشراء لا تهمني والمعادله المرفقه مستحيل تحقيقها حيث الهدف هو البيع فقط عندما يكون الاتجاه تنازلي
هو اكسبيرت لكن الهدف هو التنبيه فقط

وجزاك الله كل خير وشكرا مقدما



//+------------------------------------------------------------------+//| MACD Sample.mq4 |//| Copyright 2005-2014, MetaQuotes Software Corp. |//| https://www.mql4.com |//+------------------------------------------------------------------+#property copyright "2005-2014, MetaQuotes Software Corp."#property link "https://www.mql4.com"
input double TakeProfit =50;input double Lots =0.1;input double TrailingStop =30;input double MACDOpenLevel =3;input double MACDCloseLevel=2;input int MATrendPeriod =26;//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+void OnTick(void) { double MacdCurrent,MacdPrevious; double SignalCurrent,SignalPrevious; double MaCurrent,close15,clwwwwoz60,close151, MaPrevious; int cnt,ticket,total;//---// initial data checks// it is important to make sure that the expert works with a normal// chart and the user did not make any mistakes setting external // variables (Lots, StopLoss, TakeProfit, // TrailingStop) in our case, we check TakeProfit// on a chart of less than 100 bars//--- if(Bars<100) { Print("bars less than 100"); return; } if(TakeProfit<10) { Print("TakeProfit less than 10"); return; }//--- to simplify the coding and speed up access data are put into internal variables close15=iClose(NULL,15,1); close151=iClose(NULL,15,2); clwwwwoz60=iLow(NULL,60,1); MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_ MAIN,0); MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE _MAIN,1); SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MOD E_SIGNAL,0); SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MO DE_SIGNAL,1); MaCurrent=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRIC E_CLOSE,0); MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRI CE_CLOSE,1); total=OrdersTotal(); if(total<1) { //--- no opened orders identified if(AccountFreeMargin()<(1000*Lots)) { Print("We have no money. Free Margin = ",AccountFreeMargin()); return; } //--- check for long position (BUY) possibility if(MacdCurrent<0 && MacdCurrent>SignalCurrent &&MacdCurrent<0 && MacdCurrent<SignalCurrent) { ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+ TakeProfit*Point,"macd sample",16384,0,Green); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES )) Print("BUY order opened : ",OrderOpenPrice()); } else Print("Error opening BUY order : ",GetLastError()); return; } //--- check for short position (SELL) possibility if(close151>clwwwwoz60&&close15<clwwwwoz60) { ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,"macd sample",16384,0,Red); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES )) Print("SELL order opened : ",OrderOpenPrice()); } else Print("Error opening SELL order : ",GetLastError()); } //--- exit from the "no opened orders" block return; }//--- it is important to enter the market correctly, but it is more important to exit it correctly... for(cnt=0;cnt<total;cnt++) { if(!OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)) continue; if(OrderType()<=OP_SELL && // check for opened position OrderSymbol()==Symbol()) // check for symbol { //--- long position is opened if(OrderType()==OP_BUY) { //--- should it be closed? if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious && MacdCurrent>(MACDCloseLevel*Point)) { //--- close order and exit if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,Vio let)) Print("OrderClose error ",GetLastError()); return; } //--- check for trailing stop if(TrailingStop>0) { if(Bid-OrderOpenPrice()>Point*TrailingStop) { if(OrderStopLoss()<Bid-Point*TrailingStop) { //--- modify order and exit if(!OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green)) Print("OrderModify error ",GetLastError()); return; } } } } else // go to short position { //--- should it be closed? if(MacdCurrent<0 && MacdCurrent>SignalCurrent && MacdPrevious<SignalPrevious && MathAbs(MacdCurrent)>(MACDCloseLevel*Point)) { //--- close order and exit if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,Vio let)) Print("OrderClose error ",GetLastError()); return; } //--- check for trailing stop if(TrailingStop>0) { if((OrderOpenPrice()-Ask)>(Point*TrailingStop)) { if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0)) { //--- modify order and exit if(!OrderModify(OrderTicket(),OrderOpenPrice(),Ask +Point*TrailingStop,OrderTakeProfit(),0,Red)) Print("OrderModify error ",GetLastError()); return; } } } } } }//--- }//+------------------------------------------------------------------+

sabil
06-07-2018, 03:14 PM
لو سمحت اخي حسن عايز دالة استدعاء المؤشر المرفق
دالة استدعاء الخط العلوي ودالة استدعاء الخط السفلي

mahmoud1111
06-07-2018, 07:12 PM
والله قاصر علي الشكر
شكرا جزيلا لك معلمي الفاضل

kira-h
06-07-2018, 08:33 PM
لو سمحت اخي حسن عايز دالة استدعاء المؤشر المرفق
دالة استدعاء الخط العلوي ودالة استدعاء الخط السفلي
ارفق المؤشر مفتوح الكود لمعرفة شروطه

kira-h
06-07-2018, 08:33 PM
والله قاصر علي الشكر
شكرا جزيلا لك معلمي الفاضل
بالتوفيق إن شاء الله

sabil
07-07-2018, 01:24 PM
ارفق المؤشر مفتوح الكود لمعرفة شروطه

للاسف لا املك غير تلك النسخة
انا احتاج بس تعريف الخط العلوي والسفلي لاستخدامها داخل الاكسبرت

kira-h
07-07-2018, 06:13 PM
للاسف لا املك غير تلك النسخة
انا احتاج بس تعريف الخط العلوي والسفلي لاستخدامها داخل الاكسبرت
يمكنك معرفة الترندات المائلة من خلال الوظيفة ObjectGetValueByShift ولكن اسمي الخطين هنا بالمؤشر عبارة عن اسم + توقيت معين، هذا التوقيت مجهول الهوية لن نعرف مصدره الا بمراجعة الكود

shivaa
08-07-2018, 05:10 AM
ستقوم باستخدام الوظيفة iCustum
مثال :


double Ex(int index,int shift)
{
return(iCustom(Symbol(),0,"Ex_50_Y",index,shift));
}


بحيث index أندكس المؤشر بمعني رقم اشارة المؤشر، وستجد الأرقام مرتبة بإعدادات ألوان المؤشر
shift قيمة الاشارة عند شمعة معينة، مثلا 1 أي قيمة الاشارة عند إغلاق الشمعة 1
السلام عليكم
اذا لم يوجد اى الوان او اندكس كيف احدد نوع السهم من بيع او شراء

kira-h
08-07-2018, 03:57 PM
السلام عليكم
اذا لم يوجد اى الوان او اندكس كيف احدد نوع السهم من بيع او شراء
وعليكم السلام
في هذه الحالة سيكون المؤشر
عبارة عن كائن على الشارت (أوبجكت) يعني يمكن تحريك السهم بالماوس مثل الترندات والخطوط ...
وبالتالي ستستخدم الوظيفة ObjectGet لمعرفة توقيت ظهور السهم وتقارنها مع توقيت الشمعة 1 (أو أي شمعة أخرى حسب ما تريد)
مثال اسم السهم الصاعد UP سيكون الشرط كالتالي :


double buy=ObjectGet("UP",OBJPROP_TIME1);

if(buy>=Time[1])//شرط الشراء

mahmoud1111
09-07-2018, 07:13 PM
السلام عليكم استاذي الكريم
ارفق لحضراتكم قمت بعمله بمساعدة احدي المواقع وحضرتك بنصايحك والمعلومات المهمة من حضرتك
لكن في عدد 2 خطا

الاول شروط اغلاق الصفقة لا يتم تطبيقها
ثانيا عندما تنعكس الصفقة عدد 10 نقاط لا يتم فتح صفقة اخري بنفس الشروط

ارجو من حضراتكو القاء نظرة علي الاكسبيرت واخباري بكيفية اصلاح الاخطاء

شكرا لكم مقدما

kira-h
10-07-2018, 06:41 PM
السلام عليكم استاذي الكريم
ارفق لحضراتكم قمت بعمله بمساعدة احدي المواقع وحضرتك بنصايحك والمعلومات المهمة من حضرتك
لكن في عدد 2 خطا

الاول شروط اغلاق الصفقة لا يتم تطبيقها
ثانيا عندما تنعكس الصفقة عدد 10 نقاط لا يتم فتح صفقة اخري بنفس الشروط

ارجو من حضراتكو القاء نظرة علي الاكسبيرت واخباري بكيفية اصلاح الاخطاء

شكرا لكم مقدما
وعليكم السلام
مرفق الاكسبيرت المعدل

shivaa
10-07-2018, 07:25 PM
وعليكم السلام
في هذه الحالة سيكون المؤشر
عبارة عن كائن على الشارت (أوبجكت) يعني يمكن تحريك السهم بالماوس مثل الترندات والخطوط ...
وبالتالي ستستخدم الوظيفة
ObjectGet لمعرفة توقيت ظهور السهم وتقارنها مع توقيت الشمعة 1 (أو أي شمعة أخرى حسب ما تريد)
مثال اسم السهم الصاعد UP سيكون الشرط كالتالي :



double buy=ObjectGet("UP",OBJPROP_TIME1);

if(buy>=Time[1])//شرط الشراء
السلام عليكم ممكن مساعد فى عمل شروط الدخول
حيث اسم السهم متغير
المؤشر يظهر فيه ثلاث اسهم
السهم الاول ازرق استعداد للتغير الاتجاه
وسهم احمر تحقق الشرط بيع
وسهم اخضر تحقق شرط الشراء
المشكله ان اسم السهم فى مؤشر متغير
كيف الدخول اذا تحقق شرط البيع والشراء فقط
مرفق المؤشر

mahmoud1111
10-07-2018, 07:43 PM
كلمات الثناء لا توفيك حقك، شكراً لك على عطائك.

جميل من الإنسان أن يكون شمعة ينير درب الحائرين، ويأخذ بأيديهم ليقودهم إلى بَّر الأمان متجاوزاً بهم أمواج الفشل والقصور.

kira-h
12-07-2018, 03:21 AM
كلمات الثناء لا توفيك حقك، شكراً لك على عطائك.

جميل من الإنسان أن يكون شمعة ينير درب الحائرين، ويأخذ بأيديهم ليقودهم إلى بَّر الأمان متجاوزاً بهم أمواج الفشل والقصور.

العفو وجزاك الله خيرا

kira-h
12-07-2018, 03:30 AM
السلام عليكم ممكن مساعد فى عمل شروط الدخول
حيث اسم السهم متغير
المؤشر يظهر فيه ثلاث اسهم
السهم الاول ازرق استعداد للتغير الاتجاه
وسهم احمر تحقق الشرط بيع
وسهم اخضر تحقق شرط الشراء
المشكله ان اسم السهم فى مؤشر متغير
كيف الدخول اذا تحقق شرط البيع والشراء فقط
مرفق المؤشر
وعليكم السلام
حاول المقارنة بين اسماء الاشارات ستجد جزء من الاسم مشترك ثابث ثم غالبا يكون الجزء المتبقي عبارة عن توقيت والتوقيت قيمة متغيرة
لهذا قم بعمل اختبارات حتى تكتشف طريقة بناء الاسم المتغير ومنه تستخرج القيم بدمجه مع الاسم الثابث باستخدام الجمع +
طريقة اخرى بان تعدل على المؤشر نفسه وتحذف منه الجزء المتغير بالاسم او تضع اي اسم اخر مناسب او تستخدم نفس طريقة عمله

shivaa
12-07-2018, 09:31 PM
وعليكم السلام
حاول المقارنة بين اسماء الاشارات ستجد جزء من الاسم مشترك ثابث ثم غالبا يكون الجزء المتبقي عبارة عن توقيت والتوقيت قيمة متغيرة
لهذا قم بعمل اختبارات حتى تكتشف طريقة بناء الاسم المتغير ومنه تستخرج القيم بدمجه مع الاسم الثابث باستخدام الجمع +
طريقة اخرى بان تعدل على المؤشر نفسه وتحذف منه الجزء المتغير بالاسم او تضع اي اسم اخر مناسب او تستخدم نفس طريقة عمله

جزاك الله خير
تم التعديل على المؤشر

اضفت Object ثم طلبتها
عن طريق ObjectDescription
عرفت قمتها الحاليه وعليه دخلت شراءاو بيع

kira-h
13-07-2018, 10:13 AM
جزاك الله خير
تم التعديل على المؤشر

اضفت Object ثم طلبتها
عن طريق ObjectDescription
عرفت قمتها الحاليه وعليه دخلت شراءاو بيع

جيد اخي الكريم
والله الموفق

mahmoud1111
13-07-2018, 09:33 PM
السلام عليكم اخي ومعلمي
ارغب من حضراتكم وضع خاصية اغلاق علي الربح المحدد لكل الصفقات المفتوحة
يعني لو وصل اجمالي الصفقات المفتوحة الي 20 نقطة ربح يتم اغلاق كافة الصفقات المفتوحة

مرفق الاكسبيرت

وشكرا لكم مقدما

kira-h
14-07-2018, 06:52 PM
السلام عليكم اخي ومعلمي
ارغب من حضراتكم وضع خاصية اغلاق علي الربح المحدد لكل الصفقات المفتوحة
يعني لو وصل اجمالي الصفقات المفتوحة الي 20 نقطة ربح يتم اغلاق كافة الصفقات المفتوحة

مرفق الاكسبيرت

وشكرا لكم مقدما
وعليكم السلام
اخي الكريم هذا الموضوع مخصص فقط للأسئلة البرمجية
المرجو فتح موضوع طلب جديد ولا تنسى ان ترفق الاكسبيرت مفتوح الكود بصيغة mq4

mahmoud1111
15-07-2018, 09:49 PM
السلام عليكم اخي ومعلمي
ارغب من حضراتكم وضع خاصية اغلاق علي الربح المحدد لكل الصفقات المفتوحة
يعني لو وصل اجمالي الصفقات المفتوحة الي 20 نقطة ربح يتم اغلاق كافة الصفقات المفتوحة

مرفق الاكسبيرت بصيغة mql4

وشكرا لكم مقدما

shivaa
15-07-2018, 11:16 PM
السلام عليكم
ممكن اعرف كود مصفوفة الأزواج بحيث ان يكون متغير خرجى
اكتب فيه الازواج الا عوزه تفتح على الاكسبيرت
ان يكون الاكسبيرت مفعل على جميع الازواج الا انا كتبتها فى المتغير الخارجى
اكون شاكر

shivaa
16-07-2018, 11:47 PM
السلام عليكم ممكن اضيف طلب استدعاء اكسبيرت من اكسبيرت على شرت اخر غير الشرط الفعال
معنى كلامى
يوجد اكسبيرت يعمل على شارت eurusd اذا تحقق شروط دخول صفقه يطلب استدعاء اكسبيرت على شرط gbpusd

ممكن اعرف كود مصفوفة الأزواج بحيث ان يكون متغير خرجى
اكتب فيه الازواج الا عوزه تفتح على الاكسبيرت
ان يكون الاكسبيرت مفعل على جميع الازواج الا انا كتبتها فى المتغير الخارجى

اكون شاكر

kira-h
17-07-2018, 12:55 AM
السلام عليكم اخي ومعلمي
ارغب من حضراتكم وضع خاصية اغلاق علي الربح المحدد لكل الصفقات المفتوحة
يعني لو وصل اجمالي الصفقات المفتوحة الي 20 نقطة ربح يتم اغلاق كافة الصفقات المفتوحة

مرفق الاكسبيرت بصيغة mql4

وشكرا لكم مقدما

وعليكم السلام
راجع المشاركة التالية :
https://www.fxprg.com/vb/showthread.php?t=31456&page=3&p=844601&viewfull=1#post844601

kira-h
17-07-2018, 01:01 AM
السلام عليكم ممكن اضيف طلب استدعاء اكسبيرت من اكسبيرت على شرت اخر غير الشرط الفعال
معنى كلامى
يوجد اكسبيرت يعمل على شارت eurusd اذا تحقق شروط دخول صفقه يطلب استدعاء اكسبيرت على شرط gbpusd

ممكن اعرف كود مصفوفة الأزواج بحيث ان يكون متغير خرجى
اكتب فيه الازواج الا عوزه تفتح على الاكسبيرت
ان يكون الاكسبيرت مفعل على جميع الازواج الا انا كتبتها فى المتغير الخارجى

اكون شاكر
وعليكم السلام
يمكنك استخدام دوال الجلوبال لنقل الأوامر بين الاكسبيرتات، راجع آلية عملها بالمشاركة التالية:
Global Vartiables (https://www.fxprg.com/vb/showthread.php?t=31457&page=9&p=846193&viewfull=1#post846193)

بالنسبة لمصفوفة الازواج الاختيارية راجع المشاركة التالية :
https://www.fxprg.com/vb/showthread.php?t=31457&page=134&p=883664&viewfull=1#post883664

mahmoud1111
17-07-2018, 09:42 PM
شكرا لك معلمي
قمت بعمل المطلوب
لكن يوجد حرف q ليس له تعريف

قمت بارفاق الاكسبيرت
لتلقي نظرة عليه
ولو سمحت ممكن كود عدد الصفقات للزوج الواحد

شكرا لكم سيدي

kira-h
17-07-2018, 11:27 PM
شكرا لك معلمي
قمت بعمل المطلوب
لكن يوجد حرف q ليس له تعريف

قمت بارفاق الاكسبيرت
لتلقي نظرة عليه
ولو سمحت ممكن كود عدد الصفقات للزوج الواحد

شكرا لكم سيدي
العفو أخي الكريم
مرفق الاكسبيرت

shivaa
17-07-2018, 11:37 PM
السلام عليكم
هل ممكن اعرف جميع االازواج المفتوحه على الشارت
عاوز اقارن بين الازواج المطلب فتحها و الموجوده بالفعل
بحيث لا اعيد فتح زوج موجود بالفعل

kira-h
18-07-2018, 05:20 PM
السلام عليكم
هل ممكن اعرف جميع االازواج المفتوحه على الشارت
عاوز اقارن بين الازواج المطلب فتحها و الموجوده بالفعل
بحيث لا اعيد فتح زوج موجود بالفعل
وعليكم السلام
ستقوم بعمل دالة عدد الصفقات بدلالة اسم الزوج كالتالي:


int orderscnt(string symbol)
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==symbol && MagicNo==OrderMagicNumber())
{
cnt++;
}
}
}
return(cnt);
}


ثم تكون الشروط مثلا :


void OnTick()
{
string Symbols_Array[];
ushort sep=StringGetCharacter(",",0);
StringSplit(Pairs_Name,sep,Symbols_Array);

for(int i=0;i<ArraySize(Symbols_Array);i++)
{
string sym=suffix+Symbols_Array[i]+perfix;
if(orderscnt(sym)==0)
{
bool s=OrderSend(sym,OP_BUY,Lots,MarketInfo(sym,MODE_AS K),30,0,0,"Kira-h",MagicNo,0,Blue);
}
}
}


ولا تنسى أن تجعل الأزواج لها نفس الماجك نمبر، أو عدم اعتماد شرط الماجك نمبر من الأساس

mahmoud1111
19-07-2018, 11:22 PM
شكرا لكم استاذي
يوجد خطا بعد التعديل اصبح لا يفتح اي صفقة


ولو سمحت ممكن كود عدد الصفقات للزوج الواحد

kira-h
20-07-2018, 05:22 PM
شكرا لكم استاذي
يوجد خطا بعد التعديل اصبح لا يفتح اي صفقة


ولو سمحت ممكن كود عدد الصفقات للزوج الواحد

لا يوجد اخطاء بالكود
أما بدالة عدد الصفقات فقط استبدل المتغير symbol باسم الزوج المحدد (الاسم كاملا كما بالمنصة)
مثلا :


int orderscnt()
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()=="EURUSD" && MagicNo==OrderMagicNumber())
{
cnt++;
}
}
}
return(cnt);
}

mahmoud1111
20-07-2018, 08:22 PM
الف شكر استاذي
جعلها الله في ميزان حسناتك

kira-h
21-07-2018, 02:59 PM
الف شكر استاذي
جعلها الله في ميزان حسناتك
العفو وبالتوفيق ان شاء الله

sal_moh85
23-07-2018, 02:46 PM
سلام عليكم استاذ حسن بس بدي مساعده في تتمت فكره اكسبريت
مثال عشان تنفهم فكرة اكسبريت

double L=iLow(NULL,0,1); double H=iHigh(NULL,0,1); double C=iClose(NULL,0,0); double O=iOpen(NULL,0,0); double Check1=(H-C)/Point; double Check2=(C-L)/Point;
هذا الكود يحدد الفجوة التي يجب ان تحصل لكي يقوم بوضع امر معلق باي ستوب او سيل ستوب
في مثالنا هذا ناخذ اوامر الباي ستوب

Check1 >= Threshold&& Check2 >= Threshold&& O<H
Threshold مقصود بها مسافة الفجوه
المشكله الذي اريد حلها في توقيت حذف الصفقه وفتح الصفقه في ثواني اي انا واضع حذف الصفقات في ثواني 2980 عند كل شمعه ساعه
يتبقى لكي تكمل شمعة الساعه 620 ثانيه هذه الفتره السماح لي فتح الصفقه او بمعنى اخر
اعطي وقت لي حصول الفجوه بمدة 620 ثانيه بعد هذه المده لا يتم فتح صفقات
وشكرا جزيلا ارجو ان يكون شرح واضح

sabil
23-07-2018, 04:40 PM
يمكنك معرفة الترندات المائلة من خلال الوظيفة ObjectGetValueByShift ولكن اسمي الخطين هنا بالمؤشر عبارة عن اسم + توقيت معين، هذا التوقيت مجهول الهوية لن نعرف مصدره الا بمراجعة الكود

وما هو الحل؟
لا يمكنني الحصول على المؤشر مفتوح الكود ولكني اعرف شروط عمله لاني انا صاحبه ولكن المبرمج يرفض منحي اياه مفتوح الكود

انا اجريت عدة تجارب ولكن لم يعمل معي ابداً

المؤشر والاكسبرت في المرفقات

kira-h
23-07-2018, 06:40 PM
سلام عليكم استاذ حسن بس بدي مساعده في تتمت فكره اكسبريت
مثال عشان تنفهم فكرة اكسبريت

double L=iLow(NULL,0,1); double H=iHigh(NULL,0,1); double C=iClose(NULL,0,0); double O=iOpen(NULL,0,0); double Check1=(H-C)/Point; double Check2=(C-L)/Point;
هذا الكود يحدد الفجوة التي يجب ان تحصل لكي يقوم بوضع امر معلق باي ستوب او سيل ستوب
في مثالنا هذا ناخذ اوامر الباي ستوب

Check1 >= Threshold&& Check2 >= Threshold&& O<H
Threshold مقصود بها مسافة الفجوه
المشكله الذي اريد حلها في توقيت حذف الصفقه وفتح الصفقه في ثواني اي انا واضع حذف الصفقات في ثواني 2980 عند كل شمعه ساعه
يتبقى لكي تكمل شمعة الساعه 620 ثانيه هذه الفتره السماح لي فتح الصفقه او بمعنى اخر
اعطي وقت لي حصول الفجوه بمدة 620 ثانيه بعد هذه المده لا يتم فتح صفقات
وشكرا جزيلا ارجو ان يكون شرح واضح
وعليكم السلام
لم أفهم شيء بسبب التناقض بالمطلوب
اولا حسب الشروط فـ Threshold عبارة عن مسافة بالنقاط وليس فجوة زمنية

ثانيا إذا تريد أن لا يفتح أمر معلق إلا بعد مرور 620 ثانية من افتتاح الشمعة فقم بالمقارنة بين توقيت الشمعة الحالية [0]Time والتوقيت الحالي ()TimeCurrent
وهذا الفرق إذا كان أصغر من 620 لا يتم التنفيذ
غير ذلك فالمطلوب غير واضح

sal_moh85
23-07-2018, 07:09 PM
وعليكم السلام
لم أفهم شيء بسبب التناقض بالمطلوب
اولا حسب الشروط فـ Threshold عبارة عن مسافة بالنقاط وليس فجوة زمنية

ثانيا إذا تريد أن لا يفتح أمر معلق إلا بعد مرور 620 ثانية من افتتاح الشمعة فقم بالمقارنة بين توقيت الشمعة الحالية [0]Time والتوقيت الحالي ()TimeCurrent
وهذا الفرق إذا كان أكبر من 620 لا يتم التنفيذ
غير ذلك فالمطلوب غير واضح

مشكور اخ حسن
Threshold هي المسافه في نقاط صح
انا اريد ان يفتح صفقه ضمن نطاق من 1 ثانيه الى620 ثانيه وما بعد 620 ثانيه لا يتفعل الامر

kira-h
23-07-2018, 07:25 PM
مشكور اخ حسن
Threshold هي المسافه في نقاط صح
انا اريد ان يفتح صفقه ضمن نطاق من 1 ثانيه الى620 ثانيه وما بعد 620 ثانيه لا يتفعل الامر




مثال :

if((TimeCurrent()-Time[0])<=620)//Open Order

sal_moh85
23-07-2018, 07:35 PM
مثال :

if((TimeCurrent()-Time[0])<=620)//Open Order
مشكور اخ حسن تمام

kira-h
24-07-2018, 05:28 PM
مشكور اخ حسن تمام
بالتوفيق إن شاء الله

basel_99
26-07-2018, 06:18 PM
مرحبا
انا عضو جديد معكون، شكرا استاذ لكرمك و افادتك.

basel_99
26-07-2018, 06:49 PM
لو سمحت استاذ بدي اعرف الصيغة صح و ان كانت غلط يا ريت تصححلي ياها وشكرا جزيلا

<?php
bool buy()
{
double u=iBands(NULL,0,20,2,0,0,1,0);
if(u==Ask+10*point)return(true);
else return(false);
}

if(buy())
{
tk=OrderSend(Symbol(),OP_BUYSTOP,Lots,NormalizeDou ble(Ask,_Digits),3*P,SL,TP,"",MagicNumber,0);
}
?>

kira-h
27-07-2018, 04:01 AM
مرحبا
انا عضو جديد معكون، شكرا استاذ لكرمك و افادتك.
مرحبا بك

لو سمحت استاذ بدي اعرف الصيغة صح و ان كانت غلط يا ريت تصححلي ياها وشكرا جزيلا

<?php
bool buy()
{
double u=iBands(NULL,0,20,2,0,0,1,0);
if(u==Ask+10*point)return(true);
else return(false);
}

if(buy())
{
tk=OrderSend(Symbol(),OP_BUYSTOP,Lots,NormalizeDou ble(Ask,_Digits),3*P,SL,TP,"",MagicNumber,0);
}
?>

ولكن ماذا تريد عمله بالصيغة؟

basel_99
27-07-2018, 09:44 AM
اريد تعليق اوامر على حدي البولينجر الاعلى و الاسفل لو سمحت، مع جزيل الشكر

kira-h
27-07-2018, 06:06 PM
اريد تعليق اوامر على حدي البولينجر الاعلى و الاسفل لو سمحت، مع جزيل الشكر
مثال :


void OnTick()
{
double u=iBands(Symbol(),0,20,2,0,0,MODE_UPPER,0);
double price,SL,TP;


if(OrdersTotal()==0)
{
price=u+10*point;
SL=price-20*point;
TP=price+20*point;
tk=OrderSend(Symbol(),OP_BUYSTOP,Lots,price,3*P,SL ,TP,"",MagicNumber,0);
}
}

basel_99
27-07-2018, 07:30 PM
شكرا استاذ

sal_moh85
27-07-2018, 09:47 PM
سلام عليكم اخ حسن
سوال بي نسبه لي ستوب لوز المخفي وترينغ ستوب وتيك بروفت
طبعا في اكواد كتير لهل الشي بس في استاذ وضاح العطار شرح فكره ارجو ان تعطين مثال لكي افهمها وشكرا
هذه فكرة استاذ الوضاح
ما شاء الله أخي الكريم ...

عمل متقن وكود احترافي ...

بالنسبة لي فأنا أستخدم فكرة أخرى للهدف والوقف المخفي ... وأيضا التريلينج ستوب .


الفكرة باختصار هي تعريف قيمة افتراضية وهمية أكبر بعدة مرات من هدفنا أو وقفنا الحقيقي ...

مثلا هدفنا 5 نقاط فقط ... نقوم بتعريف الهدف الافتراضي 50 نقطة ..

نعدل الهدف لهذه الصفقة ليكون 55 نقطة من سعر الافتتاح .

والأن بمجرد أن يصبح الفرق بين السعر الحالي والهدف الوهمي أقل من 50 ... يتم إغلاق الصفقة .

وأيضا نفس الأمر بالنسبة للوقف .

بالنسبة للتريلينج ستوب يتم تعديل الوقف الإفتراضي كلما مشت الصفقة لصالحنا ... ويتعامل معه الاكسبيرت بطرح قيمة الوقف الإفتراضي ... وبمجرد أن تقل القيمة عنه يقفل الصفقة .


ما الذي استفدناه من هذه الفكرة ...

نحن خزنا معلومات الوقف والهدف والتريلينج في نفس الصفقات ... ولم نعد بحاجة إلى تخزين هذه المعطيات في متحولات خارجية .

وبمجرد تشغيل الاكسبيرت في أي وقت سيعرف تماما ما عليه أن يفعل .. بناء على المعطيات المخزنة أصلا في الصفقات ...

فائدة أخرى هنا ... وهي وجود وقف وهدف حقيقي في السيرفر ... نضمن تنفيذه في السيرفر ... في حال حدوث مشاكل في الاتصال أو في السيرفر نفسه .

sabil
28-07-2018, 01:34 AM
اخي حسن
هناك 8 تحذيرات بالاكسبرت المرفق ارجو تخطيها
بدون مسح تلك الدالة / الكود

#property strict

basel_99
28-07-2018, 09:46 AM
صباح الخير، شكرا للافادة من قبل جميع الأعضاء و على رأسهم استاذنا العزيز
عندي فضول اعرف هل يمكن قياس سرعة حركة الشموع مثلا خلال دقيقه كم نقطة تحركت و خلال كم ثانية هذه الحركة، و ان كان هذا ممكنا كيف اوظف هذه المعلومات بأن تظهر في نافذة صغيرة قرب الشمعة المحددة، عذرا للاطاله و عن السؤال نفسه ايضا لكنني مبتدئ و ارجو ان اتعلم منكم شكرا لسعة صدوركم

Ahmed
28-07-2018, 02:31 PM
اخي حسن
هناك 8 تحذيرات بالاكسبرت المرفق ارجو تخطيها
بدون مسح تلك الدالة / الكود

#property strict

kira-h
29-07-2018, 01:40 AM
سلام عليكم اخ حسن
سوال بي نسبه لي ستوب لوز المخفي وترينغ ستوب وتيك بروفت
طبعا في اكواد كتير لهل الشي بس في استاذ وضاح العطار شرح فكره ارجو ان تعطين مثال لكي افهمها وشكرا
هذه فكرة استاذ الوضاح
ما شاء الله أخي الكريم ...

عمل متقن وكود احترافي ...

بالنسبة لي فأنا أستخدم فكرة أخرى للهدف والوقف المخفي ... وأيضا التريلينج ستوب .


الفكرة باختصار هي تعريف قيمة افتراضية وهمية أكبر بعدة مرات من هدفنا أو وقفنا الحقيقي ...

مثلا هدفنا 5 نقاط فقط ... نقوم بتعريف الهدف الافتراضي 50 نقطة ..

نعدل الهدف لهذه الصفقة ليكون 55 نقطة من سعر الافتتاح .

والأن بمجرد أن يصبح الفرق بين السعر الحالي والهدف الوهمي أقل من 50 ... يتم إغلاق الصفقة .

وأيضا نفس الأمر بالنسبة للوقف .

بالنسبة للتريلينج ستوب يتم تعديل الوقف الإفتراضي كلما مشت الصفقة لصالحنا ... ويتعامل معه الاكسبيرت بطرح قيمة الوقف الإفتراضي ... وبمجرد أن تقل القيمة عنه يقفل الصفقة .


ما الذي استفدناه من هذه الفكرة ...

نحن خزنا معلومات الوقف والهدف والتريلينج في نفس الصفقات ... ولم نعد بحاجة إلى تخزين هذه المعطيات في متحولات خارجية .

وبمجرد تشغيل الاكسبيرت في أي وقت سيعرف تماما ما عليه أن يفعل .. بناء على المعطيات المخزنة أصلا في الصفقات ...

فائدة أخرى هنا ... وهي وجود وقف وهدف حقيقي في السيرفر ... نضمن تنفيذه في السيرفر ... في حال حدوث مشاكل في الاتصال أو في السيرفر نفسه .

وعليكم السلام
بالنسبة للهدف المخفي كالتالي :


void CloseOrdersHiddenTP()
{
bool close;
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int tk=OrderTicket(),
ot=OrderType(),
mn=OrderMagicNumber();
double op=OrderOpenPrice(),
lo=OrderLots();

if(sy==Symbol()&&mn==MagicNo)
{
if(ot==OP_BUY)
{
if(Bid>=op+HideTakeprofit*point)
{
close=OrderClose(tk,lo,NormalizeDouble(Bid,Digits) ,5*Q);
}
}
if(ot==OP_SELL)
{
if(Ask<=op-HideTakeprofit*point)
{
close=OrderClose(tk,lo,NormalizeDouble(Ask,Digits) ,5*Q);
}
}
}
}
}


والوقف المخفي كالتالي :


void CloseOrdersHiddenSL()
{
bool close;
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int tk=OrderTicket(),
ot=OrderType(),
mn=OrderMagicNumber();
double op=OrderOpenPrice(),
lo=OrderLots();

if(sy==Symbol()&&mn==MagicNo)
{
if(ot==OP_BUY)
{
if(Bid<=op-HideStoploss*point)
{
close=OrderClose(tk,lo,NormalizeDouble(Bid,Digits) ,5*Q);
}
}
if(ot==OP_SELL)
{
if(Ask>=op+HideStoploss*point)
{
close=OrderClose(tk,lo,NormalizeDouble(Ask,Digits) ,5*Q);
}
}
}
}
}


ثم نقوم باستدعائهما بالدالة الرئيسية OnTick كالتالي :



void OnTick()
{
if(HideTakeprofit>0)CloseOrdersHiddenTP();
if(HideStoploss>0)CloseOrdersHiddenSL();
//-----
}




بحيث المتغيرات الخارجية كالتالي :


input double HideTakeprofit=0,
HideStoploss=0;






//------------------
اما كود التريلينغ ستوب المخفي كالتالي :



input double TrailingStop=5,
TrailingStep=0;

int Q;
double point,slb=0,sls=0;
bool s;

int OnInit()
{
Comment("Programmed by Kira-h");
if(_Digits==5||_Digits==3)Q=10;else Q=1;
if(_Digits<4)point=0.01;else point=0.0001;
return(INIT_SUCCEEDED);
}

void OnTick()
{
if(TrailingStop>0)MoveTrailingStop();
}

void MoveTrailingStop()
{
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int tk=OrderTicket(),
ot=OrderType(),
mn=OrderMagicNumber();
double op=OrderOpenPrice(),
tp=OrderTakeProfit(),
lo=OrderLots();
if(sy==Symbol()&&mn==MagicNo&&ot<=OP_SELL)
{
if(ot==OP_BUY)
{
if(slb>0&&NormalizeDouble(Bid,Digits)<=NormalizeDouble(slb,Digits))
{
s=OrderClose(tk,lo,NormalizeDouble(Bid,Digits),5*Q ,Red);
slb=0;
return;
}
if(NormalizeDouble(Ask,Digits)>NormalizeDouble(op+(TrailingStop+TrailingStep)*poi nt,Digits))
{
if((NormalizeDouble(slb,Digits)<NormalizeDouble(Bid-TrailingStop*point,Digits))||(slb==0))
{
slb=NormalizeDouble(Bid-TrailingStop*point,Digits);
}
}
}
else
{
if(sls>0&&NormalizeDouble(Ask,Digits)>=NormalizeDouble(sls,Digits))
{
s=OrderClose(tk,lo,NormalizeDouble(Ask,Digits),5*Q ,Red);
sls=0;
return;
}
if(NormalizeDouble(Bid,Digits)<NormalizeDouble(op-(TrailingStop-TrailingStep)*point,Digits))
{
if((NormalizeDouble(sls,Digits)>NormalizeDouble(Ask+TrailingStop*point,Digits))||( sls==0))
{
sls=NormalizeDouble(Ask+TrailingStop*point,Digits) ;
}
}
}
}
}
}

kira-h
29-07-2018, 01:52 AM
شكرا استاذ
العفو اخي الكريم

kira-h
29-07-2018, 02:48 AM
صباح الخير، شكرا للافادة من قبل جميع الأعضاء و على رأسهم استاذنا العزيز
عندي فضول اعرف هل يمكن قياس سرعة حركة الشموع مثلا خلال دقيقه كم نقطة تحركت و خلال كم ثانية هذه الحركة، و ان كان هذا ممكنا كيف اوظف هذه المعلومات بأن تظهر في نافذة صغيرة قرب الشمعة المحددة، عذرا للاطاله و عن السؤال نفسه ايضا لكنني مبتدئ و ارجو ان اتعلم منكم شكرا لسعة صدوركم

مرحبا اخي الكريم
يوجد فريم الدقيقة أقل فريم زمني بالمتاتريدر4 ثم حجم الفوليوم الخاص به
وظيفة الفوليوم للدقيقة الحالية هي :

iVolume(Symbol(),PERIOD_M1,0);
مثلا الفوليوم 1000 بآخر شمعة دقيقة، معناه تحرك السعر 1000 تكة في ظرف 60 ثانية

sal_moh85
29-07-2018, 05:54 PM
وعليكم السلام
بالنسبة للهدف المخفي كالتالي :


void CloseOrdersHiddenTP()
{
bool close;
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int tk=OrderTicket(),
ot=OrderType(),
mn=OrderMagicNumber();
double op=OrderOpenPrice(),
lo=OrderLots();

if(sy==Symbol()&&mn==MagicNo)
{
if(ot==OP_BUY)
{
if(Bid>=op+HideTakeprofit*point)
{
close=OrderClose(tk,lo,NormalizeDouble(Bid,Digits) ,5*Q);
}
}
if(ot==OP_SELL)
{
if(Ask<=op-HideTakeprofit*point)
{
close=OrderClose(tk,lo,NormalizeDouble(Ask,Digits) ,5*Q);
}
}
}
}
}


والوقف المخفي كالتالي :


void CloseOrdersHiddenSL()
{
bool close;
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int tk=OrderTicket(),
ot=OrderType(),
mn=OrderMagicNumber();
double op=OrderOpenPrice(),
lo=OrderLots();

if(sy==Symbol()&&mn==MagicNo)
{
if(ot==OP_BUY)
{
if(Bid<=op-HideStoploss*point)
{
close=OrderClose(tk,lo,NormalizeDouble(Bid,Digits) ,5*Q);
}
}
if(ot==OP_SELL)
{
if(Ask>=op+HideStoploss*point)
{
close=OrderClose(tk,lo,NormalizeDouble(Ask,Digits) ,5*Q);
}
}
}
}
}


ثم نقوم باستدعائهما بالدالة الرئيسية OnTick كالتالي :



void OnTick()
{
if(HideTakeprofit>0)CloseOrdersHiddenTP();
if(HideStoploss>0)CloseOrdersHiddenSL();
//-----
}




بحيث المتغيرات الخارجية كالتالي :


input double HideTakeprofit=0,
HideStoploss=0;






//------------------
اما كود التريلينغ ستوب المخفي كالتالي :



input double TrailingStop=5,
TrailingStep=0;

int Q;
double point,slb=0,sls=0;
bool s;

int OnInit()
{
Comment("Programmed by Kira-h");
if(_Digits==5||_Digits==3)Q=10;else Q=1;
if(_Digits<4)point=0.01;else point=0.0001;
return(INIT_SUCCEEDED);
}

void OnTick()
{
if(TrailingStop>0)MoveTrailingStop();
}

void MoveTrailingStop()
{
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int tk=OrderTicket(),
ot=OrderType(),
mn=OrderMagicNumber();
double op=OrderOpenPrice(),
tp=OrderTakeProfit(),
lo=OrderLots();
if(sy==Symbol()&&mn==MagicNo&&ot<=OP_SELL)
{
if(ot==OP_BUY)
{
if(slb>0&&NormalizeDouble(Bid,Digits)<=NormalizeDouble(slb,Digits))
{
s=OrderClose(tk,lo,NormalizeDouble(Bid,Digits),5*Q ,Red);
slb=0;
return;
}
if(NormalizeDouble(Ask,Digits)>NormalizeDouble(op+(TrailingStop+TrailingStep)*poi nt,Digits))
{
if((NormalizeDouble(slb,Digits)<NormalizeDouble(Bid-TrailingStop*point,Digits))||(slb==0))
{
slb=NormalizeDouble(Bid-TrailingStop*point,Digits);
}
}
}
else
{
if(sls>0&&NormalizeDouble(Ask,Digits)>=NormalizeDouble(sls,Digits))
{
s=OrderClose(tk,lo,NormalizeDouble(Ask,Digits),5*Q ,Red);
sls=0;
return;
}
if(NormalizeDouble(Bid,Digits)<NormalizeDouble(op-(TrailingStop-TrailingStep)*point,Digits))
{
if((NormalizeDouble(sls,Digits)>NormalizeDouble(Ask+TrailingStop*point,Digits))||( sls==0))
{
sls=NormalizeDouble(Ask+TrailingStop*point,Digits) ;
}
}
}
}
}
}

مشكور جدا اخ حسن ولله يوفقك يارب على مساعده
بس بعد اذنك تعديله بسيط من حضرتك انا ما كنت احسن ساويها موجود الكود كامل
التعديله هي انو عند شمعه يلي بيتفعل فيها امر معلق وبينتهى ما عاد يفتح مره ثانيه صفقه من نفس المكان حتى تتكون نفس شروط بشمعه اخر
وتعديله ثانيه طريقة حذف امر المعلق
هلق حاليا انا واضع اكسبير لي امر المعلق بعد 50 دقيقه وتحققت شروط فتح الصفقه بعد مضي 15 دقيقه من افتتاح شمعة الساعه بي هي الحاله امر المعلق اذا ما تفعل لح ينحذف بعد ما تفتح الشمعه التاليه بي خمسة دقائق انا اوريد كود عند 59دقيقه 59 ثانيه ينحذف الامر المعلق وشكرا لك جزيلا

mahmoud1111
30-07-2018, 08:15 AM
السلام عليكم استاذي الحبيبأرغب من سيادتكم بافادتي بدالة برمجية كالتاليمثال تم فتح صفقة من نقطة 5 شراء والهدف 10 بلوت 0.01ولكن السعر عكس 10 نقاط أرغب في فتح صفقة بلوت مضاعف والهدف يكون متوسط وهكذا في فتح صفقات أخرى حتي يتم تحقيق الأهداف شكرا لكم

kira-h
30-07-2018, 11:46 PM
مشكور جدا اخ حسن ولله يوفقك يارب على مساعده
بس بعد اذنك تعديله بسيط من حضرتك انا ما كنت احسن ساويها موجود الكود كامل
التعديله هي انو عند شمعه يلي بيتفعل فيها امر معلق وبينتهى ما عاد يفتح مره ثانيه صفقه من نفس المكان حتى تتكون نفس شروط بشمعه اخر
وتعديله ثانيه طريقة حذف امر المعلق
هلق حاليا انا واضع اكسبير لي امر المعلق بعد 50 دقيقه وتحققت شروط فتح الصفقه بعد مضي 15 دقيقه من افتتاح شمعة الساعه بي هي الحاله امر المعلق اذا ما تفعل لح ينحذف بعد ما تفتح الشمعه التاليه بي خمسة دقائق انا اوريد كود عند 59دقيقه 59 ثانيه ينحذف الامر المعلق وشكرا لك جزيلا
العفو أخي
لم افهم المطلوب المكتوب باللهجة العامية!
وحسب ما فهمت أنك تريد تعليق امر معلق بمجرد افتتاح الشمعة وتريد حذفه عند افتتاح شمعة جديدة، وهكذا...

kira-h
30-07-2018, 11:50 PM
السلام عليكم استاذي الحبيبأرغب من سيادتكم بافادتي بدالة برمجية كالتاليمثال تم فتح صفقة من نقطة 5 شراء والهدف 10 بلوت 0.01ولكن السعر عكس 10 نقاط أرغب في فتح صفقة بلوت مضاعف والهدف يكون متوسط وهكذا في فتح صفقات أخرى حتي يتم تحقيق الأهداف شكرا لكم
وعليكم السلام
اخي الكريم ما تطلبه عبارة عن عدة دوال يعني اكسبيرت وليس دالة فقط، ارفق الاكسبيرت الذي قمت بعمله لتصحيحه

mahmoud1111
31-07-2018, 12:13 AM
تفضل استاذي الفاضل الاكسبيرت
وارجو من حضرتكم اضافة دالة داخل اعددات الاكسبيرت بخصوص عدد الصفقات التي ممكن ان يفتحها الاكسبيرت

شكرا لكم اخي الحبيب
بارك الله فيك

kira-h
31-07-2018, 03:15 AM
تفضل استاذي الفاضل الاكسبيرت
وارجو من حضرتكم اضافة دالة داخل اعددات الاكسبيرت بخصوص عدد الصفقات التي ممكن ان يفتحها الاكسبيرت

شكرا لكم اخي الحبيب
بارك الله فيك
العفو أخي
مرفق الاكسبيرت المعدل

sal_moh85
31-07-2018, 01:50 PM
العفو أخي
لم افهم المطلوب المكتوب باللهجة العامية!
وحسب ما فهمت أنك تريد تعليق امر معلق بمجرد افتتاح الشمعة وتريد حذفه عند افتتاح شمعة جديدة، وهكذا...
اهلا اخي حسن مشكور جدا على سرعة تجاوبك لي الموضوع لح حاول اشرحلك في فصحه
المطلوب تعديله في اكسبريت
عندما يتم فتح امر معلق على هاي او لو الشمعه مع تكون شروط التى توجد داخل اكسبريت
مثال لكي يتم فهم المطلوب
على فرض الشمعه رقم 1 تكون بها جميع الشروط الموجوده دخل اكسبيرت هاي الشمعه 1.100 تم فتح صفقه امر معلق شراء ولو شمعه 1.050 تم فتح امر معلق بيع ويوجد مدة انتهاء لي امر المعلق بي 45 دقيقه لي كلى الصفقتين
الان انتهت مدة الامر المعلق ولم يتفعل اين منهما وما زالت الشروط الموجده داخل اكسبيرت متحققه هنا لا يعيد فتح الاوامر مره اخره على سعر 1.100 و1.050 ينتظر الى تحقق شروط مره اخرى بي شمعه ثانيه هذا اول تعديل
التعديل الثاني
على فرض هاي شمعه 1.100 ولو 1.050 وتحققت جميع الشروط داخل اكسبيرت ولكن بعد مضي 15 دقيقه من افتتاح شمعة الساعه ويوجد مدة انتهاء امر المعلق بي 50 دقيقه ولم تتفعل كلا الصفقتين تتنهي المده الزمني من بعد افتتاح الشمعه الجديده بي 5 دقائق اذا استخدمنا دالة اغلاق مع شمعه القادمه هنا يحصل تاخير زمني في حذف الصفقات و فتح الصفقات عند وضع اكسبريت على حساب حقيقي او ديموه سبب ممكن ان يكون الشروط اكسبريت متحققه عند افتتاح الشمعه فقط وعند تحرك السعر الشروط لا تكن متحققه
اريد دالة حذف قبل اغلاق شمعه بي ثواني معدوده لكي يتجهز لي الشمعه القادمه
وشكرا جزيلا

kira-h
31-07-2018, 05:23 PM
اهلا اخي حسن مشكور جدا على سرعة تجاوبك لي الموضوع لح حاول اشرحلك في فصحه
المطلوب تعديله في اكسبريت
عندما يتم فتح امر معلق على هاي او لو الشمعه مع تكون شروط التى توجد داخل اكسبريت
مثال لكي يتم فهم المطلوب
على فرض الشمعه رقم 1 تكون بها جميع الشروط الموجوده دخل اكسبيرت هاي الشمعه 1.100 تم فتح صفقه امر معلق شراء ولو شمعه 1.050 تم فتح امر معلق بيع ويوجد مدة انتهاء لي امر المعلق بي 45 دقيقه لي كلى الصفقتين
الان انتهت مدة الامر المعلق ولم يتفعل اين منهما وما زالت الشروط الموجده داخل اكسبيرت متحققه هنا لا يعيد فتح الاوامر مره اخره على سعر 1.100 و1.050 ينتظر الى تحقق شروط مره اخرى بي شمعه ثانيه هذا اول تعديل
التعديل الثاني
على فرض هاي شمعه 1.100 ولو 1.050 وتحققت جميع الشروط داخل اكسبيرت ولكن بعد مضي 15 دقيقه من افتتاح شمعة الساعه ويوجد مدة انتهاء امر المعلق بي 50 دقيقه ولم تتفعل كلا الصفقتين تتنهي المده الزمني من بعد افتتاح الشمعه الجديده بي 5 دقائق اذا استخدمنا دالة اغلاق مع شمعه القادمه هنا يحصل تاخير زمني في حذف الصفقات و فتح الصفقات عند وضع اكسبريت على حساب حقيقي او ديموه سبب ممكن ان يكون الشروط اكسبريت متحققه عند افتتاح الشمعه فقط وعند تحرك السعر الشروط لا تكن متحققه
اريد دالة حذف قبل اغلاق شمعه بي ثواني معدوده لكي يتجهز لي الشمعه القادمه
وشكرا جزيلا

إذن تريد عدم تكرار فتح الأوامر بنفس الشمعة ستضيف الشرط التالي الى شروط فتح الصفقات كالتالي:

if(time!=Time[0])

ثم قبل اغلاق القوس الخاص بالشروط ستضع ما يلي:

time=Time[0];

أما تعريف time سيكون بالمتغيرات الداخلية خارج الدوال الرئيسية التالي:

datetime time=0;

ما معنى ما سبق ؟ معناه أنه عندما يكون التوقيت المخزن المتغير الزمني time مخالف لتوقيت افتتاح الشمعة [0]Time يتم فتح الصفقات
ومباشرةة بعد الفتح يصبح التوقيت المخزن time مساوي لتوقيت افتتاح الشمعة وبالتالي لن تتحقق الشروط مرة أخرى إلا بعد إغلاق الشمعة، وهكذا...

بالنسبة للتعديل الثاني لا داعي لعمل توقيت انتهاء الأمر المعلق وممكن تركه كإحتياط
استخدم الدالة التالية مهمتها حذف الأوامر المعلقة بمجرد إغلاق الشمعة


void OnTick()
{
DeletAtNextBar();
}


void DeletAtNextBar()
{
if(Time[0]!=Time[1])
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo)
{
if(OrderType()>OP_SELL)
{
if(OrderOpenTime()<Time[0])
{
bool del=OrderDelete(OrderTicket(),Red);
}
}
}
}
}
}

sal_moh85
31-07-2018, 06:08 PM
إذن تريد عدم تكرار فتح الأوامر بنفس الشمعة ستضيف الشرط التالي الى شروط فتح الصفقات كالتالي:

if(time!=Time[0])

ثم قبل اغلاق القوس الخاص بالشروط ستضع ما يلي:

time=Time[0];

أما تعريف time سيكون بالمتغيرات الداخلية خارج الدوال الرئيسية التالي:

datetime time=0;

ما معنى ما سبق ؟ معناه أنه عندما يكون التوقيت المخزن المتغير الزمني time مخالف لتوقيت افتتاح الشمعة [0]Time يتم فتح الصفقات
ومباشرةة بعد الفتح يصبح التوقيت المخزن time مساوي لتوقيت افتتاح الشمعة وبالتالي لن تتحقق الشروط مرة أخرى إلا بعد إغلاق الشمعة، وهكذا...

بالنسبة للتعديل الثاني لا داعي لعمل توقيت انتهاء الأمر المعلق وممكن تركه كإحتياط
استخدم الدالة التالية مهمتها حذف الأوامر المعلقة بمجرد إغلاق الشمعة


void OnTick()
{
DeletAtNextBar();
}


void DeletAtNextBar()
{
if(Time[0]!=Time[1])
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo)
{
if(OrderType()>OP_SELL)
{
if(OrderOpenTime()<Time[0])
{
bool del=OrderDelete(OrderTicket(),Red);
}
}
}
}
}
}


مشكور جدا اخ حسن

kira-h
01-08-2018, 04:34 PM
مشكور جدا اخ حسن
العفو وبالتوفيق إن شاء الله

mahmoud1111
01-08-2018, 08:15 PM
إن قلت شكراً فشكري لن يوفيكم، حقاً سعيتم فكان السعي مشكوراً، إن جف حبري عن التعبير يكتبكم قلب به صفاء الحب تعبيراً.

عمل المعروف يدوم والجميل دايم محفوظ، لا تفكر في يوم أنسى إنّك وقفت جنبي على طول.

kira-h
01-08-2018, 08:38 PM
إن قلت شكراً فشكري لن يوفيكم، حقاً سعيتم فكان السعي مشكوراً، إن جف حبري عن التعبير يكتبكم قلب به صفاء الحب تعبيراً.

عمل المعروف يدوم والجميل دايم محفوظ، لا تفكر في يوم أنسى إنّك وقفت جنبي على طول.
بارك الله في اخي الكريم
تمنياتي لكم بالتوفيق والنجاح

mahmoud1111
01-08-2018, 10:02 PM
شكرا لك مرة اخري
لكن هناك ملاحظة
عندما تعكس الصفقة البيع 10 نقاط يقوم بفتح صفقة شراء

والمطلوب فتح تبريد بيع وليس شراء
اخي الحبيب
لو سمحت ممكن تعديلها
الف شكر والف تحية لك

dr.elkurdi
02-08-2018, 05:13 PM
السلام عليكم

تحياتي لكم وللجميع في المنتدى.

سؤالي كيف اقوم بتحديد تاريخ اول يوم أحد من العام الحالي.

وشكرا جزيلا مقدما

kira-h
02-08-2018, 07:41 PM
شكرا لك مرة اخري
لكن هناك ملاحظة
عندما تعكس الصفقة البيع 10 نقاط يقوم بفتح صفقة شراء

والمطلوب فتح تبريد بيع وليس شراء
اخي الحبيب
لو سمحت ممكن تعديلها
الف شكر والف تحية لك
لا يوجد أخطاء ويقوم الاكسبيرت بالمطلوب،

mahmoud1111
02-08-2018, 08:37 PM
نعم استاذي لا يوجد به أخطاءلكنه أصبح مختلف كان كالتالي اذا فتح صفقة بيع وعكس السعر يفتح صفقة بيع أخرى أصبح الآن اذا عكس صفقة البيع يفتح صفقة شراء أصبح مثل الهيدج واتمني من حضراتكم6ان يكون مثل الأول فتح نفس نوع الصفقات دون استخدام الهيدجشكرا لكم مرة أخرى

kira-h
02-08-2018, 10:12 PM
نعم استاذي لا يوجد به أخطاءلكنه أصبح مختلف كان كالتالي اذا فتح صفقة بيع وعكس السعر يفتح صفقة بيع أخرى أصبح الآن اذا عكس صفقة البيع يفتح صفقة شراء أصبح مثل الهيدج واتمني من حضراتكم6ان يكون مثل الأول فتح نفس نوع الصفقات دون استخدام الهيدجشكرا لكم مرة أخرى
هذا ليس هيدج بل تحققت فرصة عكسية
تم التعديل بفتح صفقة واحدة أساسية

mahmoud1111
03-08-2018, 01:54 AM
حقيقي حضرتك ملك الاكسبيرتات ربنا يوفقك ويرزقك من حيث لا تحتسب

kira-h
03-08-2018, 04:50 PM
حقيقي حضرتك ملك الاكسبيرتات ربنا يوفقك ويرزقك من حيث لا تحتسب
وإياك اخي الكريم
والله الموفق

mahmoud1111
03-08-2018, 07:27 PM
السلام عليكم اخي الحبيب

التبريد لا يعمل
اصبح يفتح صفقة اولي بيع مثلا وعندما تعكس 10 نقاط لا يفتح شي صفقة بيع ثانية

ارجو حل هذه المشكلة
بارك الله فيك وعليكم

kira-h
04-08-2018, 04:26 PM
السلام عليكم اخي الحبيب

التبريد لا يعمل
اصبح يفتح صفقة اولي بيع مثلا وعندما تعكس 10 نقاط لا يفتح شي صفقة بيع ثانية

ارجو حل هذه المشكلة
بارك الله فيك وعليكم
وعليكم السلام
الكود سليم
تأكد من تحقق الشروط من بينها شرط MaxTrades أقصى عدد الصفقات
مع مراجعة خانة الجورنال لمعرفة السبب إذا استمر الخطأ

mahmoud1111
04-08-2018, 10:09 PM
جربته ولم يفتح
لم اغير خيار عدد الصفقات
ولم الاحظ وجود اخطاء بالجورنال

ان شاء الله يصير خير لما يفتح السوق اجربه ثاني
شكرا لك حبيبي

احمد
05-08-2018, 09:29 AM
السلام عليكم ورحمة الله وبركاته
أنا مشترك جديد معكم في المنتدى
وحقيقتا أعجبت كثيرا بالمحتوى الرائع والجميل الموجود في هذا المنتدى لكم مني التحية والشكر الجزيل
أنا بحاجة عمل كود برمجي يعرف فيه (متغير) أو( دالة ) مهمته حفظ عدد الصفقات المغلقة في فترة زمنية محددة وبعدها تكون قيمتة صفر
مثلا : يبدأ بحفظ عدد الصفقات المغلقة من الساعة 19:00 مساء حتى الساعة 07:00 صباحا وبعد الساعة السابعة صباحا يتم تصفيرة من جديد
أرجو المساعدة ولكم مني جزيل الشكر

kira-h
05-08-2018, 05:23 PM
جربته ولم يفتح
لم اغير خيار عدد الصفقات
ولم الاحظ وجود اخطاء بالجورنال

ان شاء الله يصير خير لما يفتح السوق اجربه ثاني
شكرا لك حبيبي

لاحظ الصورة، فتح الصفقات عادي
تأكد من الاعدادات ومن خانة الجورنال
8349

kira-h
05-08-2018, 07:53 PM
السلام عليكم ورحمة الله وبركاته
أنا مشترك جديد معكم في المنتدى
وحقيقتا أعجبت كثيرا بالمحتوى الرائع والجميل الموجود في هذا المنتدى لكم مني التحية والشكر الجزيل
أنا بحاجة عمل كود برمجي يعرف فيه (متغير) أو( دالة ) مهمته حفظ عدد الصفقات المغلقة في فترة زمنية محددة وبعدها تكون قيمتة صفر
مثلا : يبدأ بحفظ عدد الصفقات المغلقة من الساعة 19:00 مساء حتى الساعة 07:00 صباحا وبعد الساعة السابعة صباحا يتم تصفيرة من جديد
أرجو المساعدة ولكم مني جزيل الشكر

وعليكم السلام
ومرحبا بك
الدالة كالتالي :


int OrdersByTime()
{
int cnt=0;
for(int i=0;i<OrdersHistoryTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo&&OrderType()<=OP_SELL)
{
datetime t1=StrToTime(TimeToStr(iTime(Symbol(),1440,1),TIME _DATE) + " " + "07:00"),
t0=StrToTime(TimeToStr(iTime(Symbol(),1440,0),TIME _DATE) + " " + "19:00");
if(OrderCloseTime()>=t1&&OrderCloseTime()<=t0)cnt++;
}
}
}
return(cnt);
}

احمد
05-08-2018, 09:10 PM
بارك الله فيك وجزاك الله خيرا

shivaa
06-08-2018, 10:38 AM
السلام عليكم
عندى مؤشر يسجل قيم اسماء اسهم الموجوده على الشرط فى ملف بامتداد csv
اسم الملف يكون على اساس الشكل التالى
indti_snbr2_save2_EURUSD240_7_2_7_1.csv
البيانات الموجوده فيه هى عمودين
عمود الاول اسم السهم يعبر عن الاتجاه الترند والثانى هو قيمه السهم
حيث قيمت السهم = (0) فى حاله اتجاه صاعد (شراء)
قيمت السهم = (1) فى حاله اتجاه الهابط (بيع) تكون مثل التالى
1529915400 1
1529928000 1
1529928900 1
1530000000 1
1530003660 1
1530187200 0
1530190260 0
1530201600 0
1530202620 0
المطلوب المساعده فيه هو
كيف قراء اخر سطر وتخزينه فى متغير
اعرف انه تغير الاتجاه والدخول على اساس الخانه الثانيه
شراء او بيع
ممكن الداله كامله فيها ما اريد
مرفق الملف
اكون شاكر

mahmoud1111
06-08-2018, 05:42 PM
السلام عليكم استاذي الحبيب
الاكسبيرت المرفق شغال كويس بس فيه خطا غريب مزهقني

الخطا انه عندما يفتح اكثر من تبريد لا يضع قيمة الهدف في الصفقة علما باني اضع الهدف قريب 3 نقاط وشغال علي زوج المجنون
ارجو من شخصكم الكريم حل هذه المشكلة
ملحوظة هامة
يشتغل الاكسبيرت طبيعي في اول صفقتين ويضع الاهداف
المشكلة عند وجود اكثر من تبريد لا يضع قيمة الهدف في الصفقة

شكرا لكم استاذي الكريم

kira-h
06-08-2018, 07:56 PM
بارك الله فيك وجزاك الله خيرا
واياك اخي الكريم

kira-h
06-08-2018, 07:57 PM
السلام عليكم استاذي الحبيب
الاكسبيرت المرفق شغال كويس بس فيه خطا غريب مزهقني

الخطا انه عندما يفتح اكثر من تبريد لا يضع قيمة الهدف في الصفقة علما باني اضع الهدف قريب 3 نقاط وشغال علي زوج المجنون
ارجو من شخصكم الكريم حل هذه المشكلة
ملحوظة هامة
يشتغل الاكسبيرت طبيعي في اول صفقتين ويضع الاهداف
المشكلة عند وجود اكثر من تبريد لا يضع قيمة الهدف في الصفقة

شكرا لكم استاذي الكريم

وعليكم السلام
اخي الكريم هذا الموضوع مخصص فقط للأسئلة البرمجية

mahmoud1111
06-08-2018, 08:18 PM
المشكلة اني لا أعرف الخطأممكن لو سمحت تلقي نظرة عليه مرة اخري لو سمحتبارك الله فيك وعليكم

Amr
06-08-2018, 08:21 PM
السلام عليكم ورحمة الله وبركاته

لدي اكسبيرت ويوجد بعض النقاط في الاعدادات الخارجية ولكن لا اعلم ماهية هذه الادوات وفيما تستخدم ، فارجو المساعدة

Matin : 2
Period : 10
Method : Exponential
shift : 0
price : close price
Dev : 0.0
Inp Bande Period : 21
Inp Bande Deviation: 4.0
Inp Bande Shift: 2
Add Positions : true
Slippage : 3

وشكرا

shivaa
06-08-2018, 10:18 PM
السلام عليكم
عندى مؤشر يسجل قيم اسماء اسهم الموجوده على الشرط فى ملف بامتداد csv
اسم الملف يكون على اساس الشكل التالى
indti_snbr2_save2_EURUSD240_7_2_7_1.csv
البيانات الموجوده فيه هى عمودين
عمود الاول اسم السهم يعبر عن الاتجاه الترند والثانى هو قيمه السهم
حيث قيمت السهم = (0) فى حاله اتجاه صاعد (شراء)
قيمت السهم = (1) فى حاله اتجاه الهابط (بيع) تكون مثل التالى
1529915400 1
1529928000 1
1529928900 1
1530000000 1
1530003660 1
1530187200 0
1530190260 0
1530201600 0
1530202620 0
المطلوب المساعده فيه هو
كيف قراء اخر سطر وتخزينه فى متغير
اعرف انه تغير الاتجاه والدخول على اساس الخانه الثانيه
شراء او بيع
ممكن الداله كامله فيها ما اريد
مرفق الملف
اكون شاكر




الرجاء الرد

احمد
07-08-2018, 01:49 PM
وعليكم السلام
ومرحبا بك
الدالة كالتالي :


int OrdersByTime()
{
int cnt=0;
for(int i=0;i<OrdersHistoryTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo&&OrderType()<=OP_SELL)
{
datetime t1=StrToTime(TimeToStr(iTime(Symbol(),1440,1),TIME _DATE) + " " + "07:00"),
t0=StrToTime(TimeToStr(iTime(Symbol(),1440,0),TIME _DATE) + " " + "19:00");
if(OrderCloseTime()>=t1&&OrderCloseTime()<=t0)cnt++;
}
}
}
return(cnt);
}


أخي الكريم أولا شكرا لك على مساعدتك
الدالة تعمل على حفظ عدد المراكز المغلقة وكل شي مضبوظ
ولكن المشكلة أنها تحفظ العدد عند البداية بشكل صحيح وتستمر بحفظ العدد لمدة يومين تقريبا
والمطلوب أنها تتوقف في صباح اليوم التالي الساعة السابعة
في الحقيقة حاولت التعديل عليها ولكن لم أستطع
أرجو منك أختبارها والتأكد والتعديل عليها مع شكري وامتناني لك

mahmoud1111
07-08-2018, 04:04 PM
السلام عليكم ورحمة الله وبركاته أستاذي الفاضل ممكن دالة وضع الهدف بحيث لا تتأثر بعدد الصفقات المفتوحة مرفق الإكسبيرت في آخر مشاركة لي الذي به خطأ اشكرك مقدما

kira-h
07-08-2018, 07:15 PM
السلام عليكم ورحمة الله وبركاته

لدي اكسبيرت ويوجد بعض النقاط في الاعدادات الخارجية ولكن لا اعلم ماهية هذه الادوات وفيما تستخدم ، فارجو المساعدة

Matin : 2
Period : 10
Method : Exponential
shift : 0
price : close price
Dev : 0.0
Inp Bande Period : 21
Inp Bande Deviation: 4.0
Inp Bande Shift: 2
Add Positions : true
Slippage : 3

وشكرا

وعليكم السلام
افتراضيا يوجد اعدادات الموفينج وتتمثل في :
Period
Method
shift
price

واعدادات البولنجر باند في :
Inp Bande Period
Inp Bande Deviation
Inp Bande Shift

Slippage أقصى عدد محاولات إعادة التسعير

بقية الاعدادات غير معروفة
ولكن بالرغم من هذا كله يمكن استخدام نفس الاعدادات بشروط أخرى غير الموفينج والبولنجر، فهي فقط عبارة عن مسميات ليس إلا

kira-h
07-08-2018, 07:23 PM
أخي الكريم أولا شكرا لك على مساعدتك
الدالة تعمل على حفظ عدد المراكز المغلقة وكل شي مضبوظ
ولكن المشكلة أنها تحفظ العدد عند البداية بشكل صحيح وتستمر بحفظ العدد لمدة يومين تقريبا
والمطلوب أنها تتوقف في صباح اليوم التالي الساعة السابعة
في الحقيقة حاولت التعديل عليها ولكن لم أستطع
أرجو منك أختبارها والتأكد والتعديل عليها مع شكري وامتناني لك

الدالة سليمة كما طلبت
وسيستمر بحفظ العدد ويبدأ العد من جديد باليوم الجديد ضمن التوقيت المحدد،
لا اعلم فيما تريد استخدامها فربما كان سؤالك البرمجي في غير محله أو غير واضح
طيب جرب الدالة التالية سيتم تصفير العد بعد السابعة صباحا باليوم الجديد


int OrdersByTime()
{
int cnt=0;
for(int i=0;i<OrdersHistoryTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo&&OrderType()<=OP_SELL)
{
datetime t1=StrToTime(TimeToStr(iTime(Symbol(),1440,1),TIME _DATE) + " " + "19:00"),
t0=StrToTime(TimeToStr(iTime(Symbol(),1440,0),TIME _DATE) + " " + "07:00");
if(OrderCloseTime()>=t1&&OrderCloseTime()<=t0)cnt++;
if(TimeCurrent()>t0)cnt=0;
}
}
}
return(cnt);
}

mahmoud1111
07-08-2018, 08:40 PM
السلام عليكم ورحمة الله وبركاته أستاذي الفاضل ممكن دالة وضع الهدف بحيث لا تتأثر بعدد الصفقات المفتوحة مرفق الإكسبيرت في آخر مشاركة لي الذي به خطأ اشكرك مقدماأخي الكريم الإكسبيرت اللي قمت يصنعه بمعرفتك وتعاليم ومساعدة حضرتكواقف علي الخطأ ده جنني يشتغل في الأول كويس بس بعدين يبطل يضع هدف الصفقة ارجو من سيادتكم حل هذه المشكلة أو افادتني بالأدلة المناسبة وكيفية تركيبها شكرا موصول وجزاك الله خيرا

kira-h
07-08-2018, 09:07 PM
أخي الكريم الإكسبيرت اللي قمت يصنعه بمعرفتك وتعاليم ومساعدة حضرتكواقف علي الخطأ ده جنني يشتغل في الأول كويس بس بعدين يبطل يضع هدف الصفقة ارجو من سيادتكم حل هذه المشكلة أو افادتني بالأدلة المناسبة وكيفية تركيبها شكرا موصول وجزاك الله خيرا

مرفق الاكسبيرت

mahmoud1111
07-08-2018, 10:00 PM
جزاك الله خيرا

Amr
07-08-2018, 10:20 PM
وعليكم السلام
افتراضيا يوجد اعدادات الموفينج وتتمثل في :
Period
Method
shift
price

واعدادات البولنجر باند في :
Inp Bande Period
Inp Bande Deviation
Inp Bande Shift

Slippage أقصى عدد محاولات إعادة التسعير

بقية الاعدادات غير معروفة
ولكن بالرغم من هذا كله يمكن استخدام نفس الاعدادات بشروط أخرى غير الموفينج والبولنجر، فهي فقط عبارة عن مسميات ليس إلا

الف شكر للرد والاهتمام
وهناك نقطة اريد ان استفسر عنها اخي حسن وهي اني اشاهد حسابات مشاهدة لبعض الحسابات التي يعمل عليها اكسبيرتات واجد ان في الهيستوري كل الصفقات موضوع لها التيك بروفت مكان الستوب لوس اي ان الصفقة رابحة ومغلقة ولكن تظهر كأنها ضربت الستوب لوس بالاحمر والتيك بروفت فارغ
فكيف يحدث ذلك برمجيا رغم ان الستوب لوس لا يمكن ان يعمل مكان التيك بروفت يدويا لانه لايمكن وضع ستوب لوس لصفقة بيع اقل من سعر فتح صفقة البيع

مثال الصورة المرفقة
8375

وشكرا

shivaa
08-08-2018, 12:05 AM
السلام عليكم
عندى مؤشر يسجل قيم اسماء اسهم الموجوده على الشرط فى ملف بامتداد csv
اسم الملف يكون على اساس الشكل التالى
indti_snbr2_save2_EURUSD240_7_2_7_1.csv
البيانات الموجوده فيه هى عمودين
عمود الاول اسم السهم يعبر عن الاتجاه الترند والثانى هو قيمه السهم
حيث قيمت السهم = (0) فى حاله اتجاه صاعد (شراء)
قيمت السهم = (1) فى حاله اتجاه الهابط (بيع) تكون مثل التالى
1529915400 1
1529928000 1
1529928900 1
1530000000 1
1530003660 1
1530187200 0
1530190260 0
1530201600 0
1530202620 0
المطلوب المساعده فيه هو
كيف قراء اخر سطر وتخزينه فى متغير
اعرف انه تغير الاتجاه والدخول على اساس الخانه الثانيه
شراء او بيع
ممكن الداله كامله فيها ما اريد
مرفق الملف
اكون شاكر




شكراااااااااااااااااااااااا على عدم الرد

kira-h
08-08-2018, 01:40 AM
جزاك الله خيرا
بالتوفيق ان شاء الله

kira-h
08-08-2018, 01:45 AM
الف شكر للرد والاهتمام
وهناك نقطة اريد ان استفسر عنها اخي حسن وهي اني اشاهد حسابات مشاهدة لبعض الحسابات التي يعمل عليها اكسبيرتات واجد ان في الهيستوري كل الصفقات موضوع لها التيك بروفت مكان الستوب لوس اي ان الصفقة رابحة ومغلقة ولكن تظهر كأنها ضربت الستوب لوس بالاحمر والتيك بروفت فارغ
فكيف يحدث ذلك برمجيا رغم ان الستوب لوس لا يمكن ان يعمل مكان التيك بروفت يدويا لانه لايمكن وضع ستوب لوس لصفقة بيع اقل من سعر فتح صفقة البيع

مثال الصورة المرفقة


وشكرا
التريلينغ ستوب أو بصفة عامة OrderModify يمكن من خلاله تحريك الوقف في اتجاه ربح اقل من الربح الفعلي المحقق بالصفقة، وعند ارتداد السعر إلى ان يضرب الوقف على ربح

احمد
08-08-2018, 02:56 PM
الدالة سليمة كما طلبت
وسيستمر بحفظ العدد ويبدأ العد من جديد باليوم الجديد ضمن التوقيت المحدد،
لا اعلم فيما تريد استخدامها فربما كان سؤالك البرمجي في غير محله أو غير واضح
طيب جرب الدالة التالية سيتم تصفير العد بعد السابعة صباحا باليوم الجديد


int OrdersByTime()
{
int cnt=0;
for(int i=0;i<OrdersHistoryTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo&&OrderType()<=OP_SELL)
{
datetime t1=StrToTime(TimeToStr(iTime(Symbol(),1440,1),TIME _DATE) + " " + "19:00"),
t0=StrToTime(TimeToStr(iTime(Symbol(),1440,0),TIME _DATE) + " " + "07:00");
if(OrderCloseTime()>=t1&&OrderCloseTime()<=t0)cnt++;
if(TimeCurrent()>t0)cnt=0;
}
}
}
return(cnt);
}


نعم استاذي الدالة تحفظ العدد الصحيح ولكن العدد لا يظهر في الدالة إلا بعد الساعة 00:00
مثال على ذلك عندما يغلق مركز الساعة 21 فمن المفروظ أن يكون العدد في الدالة 1 ولكن تستمر الدالة تحمل الرقم 0 حتى الساعة 00:00 ثم يظهر الرقم 1 وبعد ذلك تستمر الدالة في عملها
بشكل صحيح في حفظ المراكز المغلقة بحيث لوتم إغلاق مركز آخر الساعة 4 فأن الدالة مباشرةً تحمل الرقم 2
طبعا انا اعرف قيمة الدالة من خلال أمر الطباعة كومنت

kira-h
08-08-2018, 05:34 PM
نعم استاذي الدالة تحفظ العدد الصحيح ولكن العدد لا يظهر في الدالة إلا بعد الساعة 00:00
مثال على ذلك عندما يغلق مركز الساعة 21 فمن المفروظ أن يكون العدد في الدالة 1 ولكن تستمر الدالة تحمل الرقم 0 حتى الساعة 00:00 ثم يظهر الرقم 1 وبعد ذلك تستمر الدالة في عملها
بشكل صحيح في حفظ المراكز المغلقة بحيث لوتم إغلاق مركز آخر الساعة 4 فأن الدالة مباشرةً تحمل الرقم 2
طبعا انا اعرف قيمة الدالة من خلال أمر الطباعة كومنت

طيب جرب الدالة التالية :


int OrdersByTime()
{
int cnt=0;
for(int i=0;i<OrdersHistoryTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo&&OrderType()<=OP_SELL)
{
datetime t1=StrToTime(TimeToStr(iTime(Symbol(),1440,0),TIME _DATE) + " " + "07:00"),
t2=StrToTime(TimeToStr(iTime(Symbol(),1440,0),TIME _DATE) + " " + "19:00"),
t3=StrToTime(TimeToStr(iTime(Symbol(),1440,1),TIME _DATE) + " " + "19:00");
if(TimeCurrent()>=t3&&TimeCurrent()<=t1&&OrderCloseTime()>=t3&&OrderCloseTime()>=t1)cnt++;
if(TimeCurrent()>=t2&&OrderCloseTime()>=t2)cnt++;
if(TimeCurrent()>=t1&&TimeCurrent()<=t2)cnt=0;
}
}
}
return(cnt);
}

احمد
08-08-2018, 05:51 PM
الان صار العكس تماما الدالة تحفظ من الساعة 19 حتى الساعة 00:00 وبعدها تكون قيمتها 0
يبدو لي أن المشكة في دخول يوم جديد

kira-h
08-08-2018, 08:03 PM
الان صار العكس تماما الدالة تحفظ من الساعة 19 حتى الساعة 00:00 وبعدها تكون قيمتها 0
يبدو لي أن المشكة في دخول يوم جديد

الدالة سليمة من حيث المبدأ لكن في خطأ بسيط جدا

&&OrderCloseTime()>=t1)cnt++;
يجب ان تكون أصغر من او يساوي وكان بامكانك تصحيحه فهي مسألة توقيتات ليس إلا
الصحيح كالتالي:


int OrdersByTime()
{
int cnt=0;
for(int i=0;i<OrdersHistoryTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo&&OrderType()<=OP_SELL)
{
datetime t1=StrToTime(TimeToStr(iTime(Symbol(),1440,0),TIME _DATE) + " " + "07:00"),
t2=StrToTime(TimeToStr(iTime(Symbol(),1440,0),TIME _DATE) + " " + "19:00"),
t3=StrToTime(TimeToStr(iTime(Symbol(),1440,1),TIME _DATE) + " " + "19:00");
if(TimeCurrent()<=t1&&OrderCloseTime()>=t3&&OrderCloseTime()<=t1)cnt++;
if(TimeCurrent()>=t2&&OrderCloseTime()>=t2)cnt++;
if(TimeCurrent()>=t1&&TimeCurrent()<=t2)cnt=0;
}
}
}
return(cnt);
}


ماذا تعني الدالة الان :
1 - إذا كان التوقيت الحالي أقل من الساعة 7 لليوم الحالي يحسب عدد الصفقات المغلقة في هذا التوقيت ما بين 19 للأمس و 7 لليوم الحالي
2 - بمجرد ان يتجاوز التوقيت الحالي الساعة 7 دون الساعة 19 لليوم الحالي يتم تصفير الدالة أي 0
3 - وبمجرد أن يتجاوز التوقيت الحالي الساعة 19 لليوم الحالي يتم حساب عدد الصفقات المغلقة بعد هذا التوقيت اي 19 لليوم الحالي
وبعد منتصف الليل تلقائيا يتم التصفير ويعود إلى الشرط 1

احمد
08-08-2018, 09:12 PM
الدالة سليمة من حيث المبدأ لكن في خطأ بسيط جدا

&&OrderCloseTime()>=t1)cnt++;
يجب ان تكون أصغر من او يساوي وكان بامكانك تصحيحه فهي مسألة توقيتات ليس إلا
الصحيح كالتالي:


int OrdersByTime()
{
int cnt=0;
for(int i=0;i<OrdersHistoryTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo&&OrderType()<=OP_SELL)
{
datetime t1=StrToTime(TimeToStr(iTime(Symbol(),1440,0),TIME _DATE) + " " + "07:00"),
t2=StrToTime(TimeToStr(iTime(Symbol(),1440,0),TIME _DATE) + " " + "19:00"),
t3=StrToTime(TimeToStr(iTime(Symbol(),1440,1),TIME _DATE) + " " + "19:00");
if(TimeCurrent()<=t1&&OrderCloseTime()>=t3&&OrderCloseTime()<=t1)cnt++;
if(TimeCurrent()>=t2&&OrderCloseTime()>=t2)cnt++;
if(TimeCurrent()>=t1&&TimeCurrent()<=t2)cnt=0;
}
}
}
return(cnt);
}


ماذا تعني الدالة الان :
1 - إذا كان التوقيت الحالي أقل من الساعة 7 لليوم الحالي يحسب عدد الصفقات المغلقة في هذا التوقيت ما بين 19 للأمس و 7 لليوم الحالي
2 - بمجرد ان يتجاوز التوقيت الحالي الساعة 7 دون الساعة 19 لليوم الحالي يتم تصفير الدالة أي 0
3 - وبمجرد أن يتجاوز التوقيت الحالي الساعة 19 لليوم الحالي يتم حساب عدد الصفقات المغلقة بعد هذا التوقيت اي 19 لليوم الحالي
وبعد منتصف الليل تلقائيا يتم التصفير ويعود إلى الشرط 1


أقول ما شاء الله عليك بارك الله فيك
أنت مبدع
والله بحثت مع مبرمجين كثر على هذه الدالة وأغلبهم لم يستطع
شكرا جزيييييييلاً

kira-h
09-08-2018, 05:12 PM
أقول ما شاء الله عليك بارك الله فيك
أنت مبدع
والله بحثت مع مبرمجين كثر على هذه الدالة وأغلبهم لم يستطع
شكرا جزيييييييلاً
العفو اخي الكريم
بالتوفيق ان شاء الله

احمد
09-08-2018, 05:31 PM
مساء الخير لكم جميعا
أخي الكريم حسن
ماهو السطر الامر البرمجي اللذي يمكنني من معرفة قيمة التريند عند كل شمعة
8392

kira-h
09-08-2018, 05:57 PM
مساء الخير لكم جميعا
أخي الكريم حسن
ماهو السطر الامر البرمجي اللذي يمكنني من معرفة قيمة التريند عند كل شمعة


مساء النور
استخدم الوظيفة

ObjectGetValueByShift(trend name, bar shift)
بحيث trend name اسم الترند
bar shift رقم الشمعة التي تريد عندها قيمة الترند