منتديات بورصات

منتديات بورصات (https://forum.borsaat.com/)
-   منتدى المؤشرات و الاكسبرتات (https://forum.borsaat.com/f14/)
-   -   تبادل الخبرات في برمجة MQL (https://forum.borsaat.com/t933685.html)

Rock 26 - 04 - 2018 06:14 PM

رد: تبادل الخبرات في برمجة MQL
 
اقتباس:

المشاركة الأصلية كتبت بواسطة ARRESSS23 (المشاركة 2489241)
مشكور حبيبي روووك على الرد السريع ،

أولا ، بالنسبة للمتغير distance فأنا لم أقم بتعريفه في الكود ، أو بالاحرى تخصيص (( affecte )) قيمة له في الكود ، حيث أترك هاذ العملية حتى الباك تيست بحكم أنه خارجي extern ،

ثانيا ، النصيحة اللي قدمتها لي (( و مشكور عليها أخي )) استعملتها من قبل فلم تنجح ، و السبب أن المتغير bors من نوع double ، و هذا النوع سواء في لغة mql4 أو باقي اللغات لا يمكن أن تتساوى مع قيم أخرى ، و السبب أن الله وحده من يعلم عدد الارقام وراء الفاصلة :)
لذلك ، كان لابد من استعمال دالة normalisedouble حتى أتحكم في عدد الارقام بعد الفاصلة و أيضا operator (( أكبر من أو يساوي )) عوض استعمال ( يساوي ) ،

أتمنى أكون شرحت كما ينبغي ،،

هلا ياغالى
طب فى حاله استخدمناها بالشكل التالى
NormalizeDouble(bors,Digits);
هل سيتحقق المطلوب بنفس العملية السابقة

وهل تقصد من عدم تساوي مع قيم اخري انه هيصل سعر الاسك او البيد لهذا السعر بمراحل تشغيل الاكسيبرت بالتالى سيتساوي كلا منهم بنفس القيمه ؟!

ARRESSS23 26 - 04 - 2018 08:58 PM

رد: تبادل الخبرات في برمجة MQL
 
اقتباس:

المشاركة الأصلية كتبت بواسطة Rock (المشاركة 2489617)
هلا ياغالى
طب فى حاله استخدمناها بالشكل التالى
NormalizeDouble(bors,Digits);
هل سيتحقق المطلوب بنفس العملية السابقة

وهل تقصد من عدم تساوي مع قيم اخري انه هيصل سعر الاسك او البيد لهذا السعر بمراحل تشغيل الاكسيبرت بالتالى سيتساوي كلا منهم بنفس القيمه ؟!

نعم ، أعتقد ان استعملنا NormalizeDouble(bors,Digits) سينجح الامر ،

بالنسبة لسؤالك الثاني أخي روووك ، عملية التساوي ممكنة نظريا فقط ، أما عمليا فهي مستحيلة لسببين على ما أظن :

- السبب الاول رياضي بامتياز ، فالاعداد الحقيقية تحمل الكثير من الارقام بعد الفاصلة بصفة غير متناهية، خذ عندك مثال العدد ( بي ) ، فعمليا لا يمكننا اعطاء قيمة مساوية بالضبط لهذا العدد ، مادمنا نحن عاجزين عن ايجاد عدد مساوي له ، فكذلك الحاسوب اللذي نعطيه الامر بايجاد عدد حقيقي مساوي ل ( بي ) سيعجز عن ذلك بالتأكيد و النتيجة راح تطلع error ، اما ان كان المطلب ايجاد قيمة قريبة ل ( بي ) ، هنا عمليا المطلب ممكن تحقيقه سواء لنا نحن البشر ، أو بالنسبة للآلة ،

- السبب الثاني يتعلق بطبيعة السوق ، فتحرك السعر يتم بسرعة خيالية أحيانا ، بل غالبا ، لنفترض أن الزمن T0 هو الزمن اللذي سيتساوى فيه السعر مع قيمة معينة ، حواسيبنا غير مهيئة لتنفيذ أمر في هذا الزمن بالذات ، فهناك تأخر زمني لعوامل كثيرة منها سرعة النت ، الخ ،،،

لذلك من الافضل استعمال دالة normalisedouble و أيضا استبدال التساوي ب (( أكبر من أو يساوي )) أو (( أصغر من يساوي )) ،،،

بالمناسبة اكتشفت الخطأ في الكود بتاعي ، الخطأ يكمن في الدالة :
if(trade == True)
الخ
كنت مضطر لاستعمال هاذ الدالة قبل أوامر البيع ، و السبب هو تفعيل اوامر بيع كثيرة عوض أمر بيع واحد ،
للاسف لا أعلم كيف أعالج الامر و لا واحد يريد مساعدتي في باقي المنتديات :(

Rock 27 - 04 - 2018 11:27 PM

رد: تبادل الخبرات في برمجة MQL
 
اقتباس:

المشاركة الأصلية كتبت بواسطة ARRESSS23 (المشاركة 2489675)
نعم ، أعتقد ان استعملنا NormalizeDouble(bors,Digits) سينجح الامر ،

بالنسبة لسؤالك الثاني أخي روووك ، عملية التساوي ممكنة نظريا فقط ، أما عمليا فهي مستحيلة لسببين على ما أظن :

- السبب الاول رياضي بامتياز ، فالاعداد الحقيقية تحمل الكثير من الارقام بعد الفاصلة بصفة غير متناهية، خذ عندك مثال العدد ( بي ) ، فعمليا لا يمكننا اعطاء قيمة مساوية بالضبط لهذا العدد ، مادمنا نحن عاجزين عن ايجاد عدد مساوي له ، فكذلك الحاسوب اللذي نعطيه الامر بايجاد عدد حقيقي مساوي ل ( بي ) سيعجز عن ذلك بالتأكيد و النتيجة راح تطلع error ، اما ان كان المطلب ايجاد قيمة قريبة ل ( بي ) ، هنا عمليا المطلب ممكن تحقيقه سواء لنا نحن البشر ، أو بالنسبة للآلة ،

- السبب الثاني يتعلق بطبيعة السوق ، فتحرك السعر يتم بسرعة خيالية أحيانا ، بل غالبا ، لنفترض أن الزمن T0 هو الزمن اللذي سيتساوى فيه السعر مع قيمة معينة ، حواسيبنا غير مهيئة لتنفيذ أمر في هذا الزمن بالذات ، فهناك تأخر زمني لعوامل كثيرة منها سرعة النت ، الخ ،،،

لذلك من الافضل استعمال دالة normalisedouble و أيضا استبدال التساوي ب (( أكبر من أو يساوي )) أو (( أصغر من يساوي )) ،،،

بالمناسبة اكتشفت الخطأ في الكود بتاعي ، الخطأ يكمن في الدالة :
if(trade == True)
الخ
كنت مضطر لاستعمال هاذ الدالة قبل أوامر البيع ، و السبب هو تفعيل اوامر بيع كثيرة عوض أمر بيع واحد ،
للاسف لا أعلم كيف أعالج الامر و لا واحد يريد مساعدتي في باقي المنتديات :(

فهمت عليك ياغالى بما تقصده بتحرك السعر مع عدم التساوي بسبب حركه الاسواق
لنحدد الآمر بـ =<

بالنسبه لتفعيل اومر كثيره ممكن نحدد عند تحقيق المطلوب بانعكاس السعر
نعمل دايره for

int r ;
for ( r=0;r>=1;r++);
{

if (r==1)
{
break ;
double d =OrderSend("باقي الآمر")};

بحيث لو حرف r = 1 تتوقف ويفتح امر البيع او الشراء المطلوب
وكده هيفتح امر واحد فقط عندما يكون الار تساوي 1
:7:

ARRESSS23 28 - 04 - 2018 10:06 PM

رد: تبادل الخبرات في برمجة MQL
 
اقتباس:

المشاركة الأصلية كتبت بواسطة Rock (المشاركة 2490144)
فهمت عليك ياغالى بما تقصده بتحرك السعر مع عدم التساوي بسبب حركه الاسواق
لنحدد الآمر بـ =<

بالنسبه لتفعيل اومر كثيره ممكن نحدد عند تحقيق المطلوب بانعكاس السعر
نعمل دايره for

int r ;
for ( r=0;r>=1;r++);
{

if (r==1)
{
break ;
double d =OrderSend("باقي الآمر")};

بحيث لو حرف r = 1 تتوقف ويفتح امر البيع او الشراء المطلوب
وكده هيفتح امر واحد فقط عندما يكون الار تساوي 1
:7:

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

Rock 30 - 04 - 2018 11:45 PM

رد: تبادل الخبرات في برمجة MQL
 
اقتباس:

المشاركة الأصلية كتبت بواسطة ARRESSS23 (المشاركة 2490267)
للاسف لم أتمكن من صيياغة هاذ الحلقة ، الكود عندك أخي روووك ، حاول ادماج هاذ الحلقة في الكود و لنر النتيجة ،

كود:

if ( " السعر وصل بخساره 20 بيب ")
{
int r;
for(r=0;r>=1;r++)
{
if ( r==1) break ;
double d = OrderSend(Symbol(),0,0.01,Ask,10,double  stoploos , double takepro ,NULL,55522,0,clrBeige );
}

هو الكود غير جاهز هو مجرد فكره

ياسر ابوزياد 01 - 06 - 2018 12:24 AM

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

bibou2014 02 - 07 - 2018 03:32 PM

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

سمير محمد ارمان 03 - 07 - 2018 07:07 PM

رد: تبادل الخبرات في برمجة MQL
 
1 مرفق
اقتباس:

المشاركة الأصلية كتبت بواسطة bibou2014 (المشاركة 2502716)
السلام عليكم ممكن كود العمل لمدة معينة على حساب معين
لانه لدي اكسبرت عندي اربعة سنين و انا اطور فيه و اريد بيعه
لكن ينقصني ختمه بكود العمل لمدة معينة
و كود العمل على حسب معين فقط
وشكرا

تم العمل
فى المرفقات
تحياتى

عبد ربه 2018 04 - 07 - 2018 10:06 AM

رد: تبادل الخبرات في برمجة MQL
 
السلام عليكم
سؤال فقط هو عندما اريد تحويل مؤشر الى اكسبرت هل يجب ان يكون المؤشر مفتوح الكود ام لا يهم ؟
وشكرا

kazamadrid 22 - 09 - 2018 01:26 PM

رد: تبادل الخبرات في برمجة MQL
 
اين يتم وضع هاذا الكود
//+------------------------------------------------------------------+
//| Check the correctness of the order volume |
//+------------------------------------------------------------------+
bool CheckVolumeValue(double volume,string &description)
{
//--- minimal allowed volume for trade operations
double min_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME _MIN);
if(volume<min_volume)
{
description=StringFormat("Volume is less than the minimal allowed SYMBOL_VOLUME_MIN=%.2f",min_volume);
return(false);
}

//--- maximal allowed volume of trade operations
double max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME _MAX);
if(volume>max_volume)
{
description=StringFormat("Volume is greater than the maximal allowed SYMBOL_VOLUME_MAX=%.2f",max_volume);
return(false);
}

//--- get minimal step of volume changing
double volume_step=SymbolInfoDouble(Symbol(),SYMBOL_VOLUM E_STEP);

int ratio=(int)MathRound(volume/volume_step);
if(MathAbs(ratio*volume_step-volume)>0.0000001)
{
description=StringFormat("Volume is not a multiple of the minimal step SYMBOL_VOLUME_STEP=%.2f, the closest correct volume is %.2f",
volume_step,ratio*volume_step);
return(false);
}
description="Correct volume value";
return(true);
}


10:01 AM

Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.0 ©2011, Crawlability, Inc.