مشكلة تكرار فتح الصفقات على نفس الشمعة
يقوم الإكسبرت بفتح صفقات مع كل حركة للسعر على نفس الشمعة
و أنا اللي أبغاه يفتح عملية وحدة فقط عند تحقق الشروط
فما هو السبب ؟؟؟؟؟ و ما هو الحل ؟؟
كود PHP:
extern int TakeProfit = 25;
extern int StopLose = 25;
extern double Lots = 0.3;
extern int MagicNumber = 23671;
double Poin;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
if (Point == 0.00001) Poin = 0.0001; //6 digits
else if (Point == 0.001) Poin = 0.01; //3 digits (for Yen based pairs)
else Poin = Point; //Normal for 5 & 3 Digit Forex Quotes
return(0);
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
double cCLOSE = iClose(NULL, 0, 1);
double pCLOSE = iClose(NULL, 0, 2);
double BP=iHigh(NULL,0,1);
double SP=iLow(NULL,0,1);
double SLB=iLow(NULL,0,1);
double SLS=iHigh(NULL,0,1);
double cma5m=iMA(NULL,0,200,0,MODE_SMA,PRICE_CLOSE,1);
double pma5m=iMA(NULL,0,200,0,MODE_SMA,PRICE_CLOSE,2);
{
if(cCLOSE>cma5m && pCLOSE<pma5m)
OrderSend(Symbol(),OP_BUYSTOP,Lots,BP,3,SLB,Ask+TakeProfit*Poin,"",MagicNumber,0,Green);
if(cCLOSE<cma5m && pCLOSE>pma5m)
OrderSend(Symbol(),OP_SELLSTOP,Lots,SP,3,SLS,Bid-TakeProfit*Poin,"",MagicNumber,0,Red);
return(0);
}
//---------------------------------
return(0);
}
//+--------
رد: مشكلة تكرار فتح الصفقات على نفس الشمعة
فقط باضافة الكود التالي بعد start() :
كود:
for(int i=0;i<OrdersTotal();i++) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderMagicNumber()==MagicNumber && Symbol()==OrderSymbol())
return;
}
بهذا يقوم الاكسبيرت في البحث عن اي طلب لنفس الزوج ومن نفس الاكسبيرت (باستخدام الماجيك نمبر)، اذا وجد هناك اي صفقة على نفس الزوج سيقف الاكسبيرت عند هذه النفطة، وهكذا.
رد: مشكلة تكرار فتح الصفقات على نفس الشمعة
كود PHP:
extern int TakeProfit = 25;
extern int StopLose = 25;
extern double Lots = 0.3;
extern int MagicNumber = 23671;
double Poin;
int Tim;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
Tim=Time[0];
if (Point == 0.00001) Poin = 0.0001; //6 digits
else if (Point == 0.001) Poin = 0.01; //3 digits (for Yen based pairs)
else Poin = Point; //Normal for 5 & 3 Digit Forex Quotes
return(0);
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
if(Time[0]==Tim)return(0)
double cCLOSE = iClose(NULL, 0, 1);
double pCLOSE = iClose(NULL, 0, 2);
double BP=iHigh(NULL,0,1);
double SP=iLow(NULL,0,1);
double SLB=iLow(NULL,0,1);
double SLS=iHigh(NULL,0,1);
double cma5m=iMA(NULL,0,200,0,MODE_SMA,PRICE_CLOSE,1);
double pma5m=iMA(NULL,0,200,0,MODE_SMA,PRICE_CLOSE,2);
{
if(cCLOSE>cma5m && pCLOSE<pma5m)
OrderSend(Symbol(),OP_BUYSTOP,Lots,BP,3,SLB,Ask+TakeProfit*Poin,"",MagicNumber,0,Green);
if(cCLOSE<cma5m && pCLOSE>pma5m)
OrderSend(Symbol(),OP_SELLSTOP,Lots,SP,3,SLS,Bid-TakeProfit*Poin,"",MagicNumber,0,Red);
return(0);
}
//---------------------------------
return(0);
}
//+--------
جرب هذا اخوي :)
1 مرفق
رد: مشكلة تكرار فتح الصفقات على نفس الشمعة
د. اودي
وين الغيبة؟؟، لا ادري هل كنت مختفي ام بسبب قلة مشاركاتي لم اراك!!
اخر مرة رأيتك فيها كانت عندما طلبت برنامج لتفريغ الاسعار الى ملف txt.. في هذا الموضوع:
https://forum.arabictrader.com/t60906.html
وللأسف لم اراك بعدها، عسى المانع خير. وما هو اخبار مشروعك؟
بالنسبة للكود اللذي ارفقته في مشاركتك فلم ينجح (انظر الصورة).
يمكن عمل ذلك فقط بالرجوع الى order magic number، الطريقة اللذي ذكرتها في مشاركتي ليست مثالية 100% ولكن تفي بالغرض الاساسي، لانه اذا كان هناك وظائف في الاكسبيرت اخرى مثل تتبع الستوب trailingstop فلن يتفعل ذلك، ولكي يكون مثالياً فيجب ن تكون بالكريقة التالية:
كود:
void start()
{
if (OrderIsActive())
TrailingStop();
else
ProcessOrder();
.
.
.
}
bool OrderIsActive()
{
for(int i=0;i<OrdersTotal();i++) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderMagicNumber()==MagicNumber && Symbol()==OrderSymbol())
return(true);
}
return(false);
}
بالتوفيق للجميع
رد: مشكلة تكرار فتح الصفقات على نفس الشمعة
السلام عليكم ...
اخي صانع القرار .. انا موجود .. :) قمت بوضع بصناعة اكسبرت ووضعته هنا في المنتدى ..
Tripple K
كانت النتائج مذهلة في الباك تست اما في الحقيقي فكانت النتائج عكس ذلك تماما :) فشل .. المهم انا موجود دائما .. ارد على المواضيع التي لي باع فيها والتي لا استطيع ان اخدم فيها فلا ارد :)
بالنسبة لموضوع الاخ .. معك حق اخي .. الكود الذي وضعته انا هو مجرد فكرة .. يعني يمكن للاخ المبرمج وضع الكود في المكان المناسب .. ولكن انا اخبره بفكرة انه يمكن استخدام هذا الكود لتنفيذ الاوامر بعد افتتاح شمعو جديدة ...
شكرا اخي على سؤالك :)
واتمنى ان يصل كاتب الموضوع لمراده :)
تحياتي لكم جميعا
رد: مشكلة تكرار فتح الصفقات على نفس الشمعة
اقتباس:
المشاركة الأصلية كتبت بواسطة صانع قرار
فقط باضافة الكود التالي بعد start() :
كود:
for(int i=0;i<OrdersTotal();i++) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderMagicNumber()==MagicNumber && Symbol()==OrderSymbol())
return;
}
بهذا يقوم الاكسبيرت في البحث عن اي طلب لنفس الزوج ومن نفس الاكسبيرت (باستخدام الماجيك نمبر)، اذا وجد هناك اي صفقة على نفس الزوج سيقف الاكسبيرت عند هذه النفطة، وهكذا.
شكرا على الكود و الشرح
سؤال / عند إضافة كود PHP:
(OrderMagicNumber()==MagicNumber && Symbol()==OrderSymbol() && OrderType() == OP_BUY)
هل سيكون الأمر لصفقات الشراء المفتوحة فقط ؟؟ و على ذلك نقيس ؟؟
رد: مشكلة تكرار فتح الصفقات على نفس الشمعة
اقتباس:
المشاركة الأصلية كتبت بواسطة Dr.Aoudi
كود PHP:
[color=black]extern int TakeProfit = 25;[/color]
[color=black]extern int StopLose = 25;[/color]
[color=black]extern double Lots = 0.3;[/color]
[color=black]extern int MagicNumber = 23671;[/color]
[color=black]double Poin;[/color]
[color=black]int Tim;[/color]
[color=black][/color]
[color=black]//+------------------------------------------------------------------+[/color]
[color=black]//| expert initialization function |[/color]
[color=black]//+------------------------------------------------------------------+[/color]
[color=black]int init()[/color]
[color=black] {[/color]
[color=black] Tim=Time[0];[/color]
[color=black] if (Point == 0.00001) Poin = 0.0001; //6 digits[/color]
[color=black] else if (Point == 0.001) Poin = 0.01; //3 digits (for Yen based pairs)[/color]
[color=black] else Poin = Point; //Normal for 5 & 3 Digit Forex Quotes[/color]
[color=black] [/color]
[color=black]return(0);[/color]
[color=black] [/color]
[color=black] return(0);[/color]
[color=black] }[/color]
[color=black]//+------------------------------------------------------------------+[/color]
[color=black]//| expert deinitialization function |[/color]
[color=black]//+------------------------------------------------------------------+[/color]
[color=black]int deinit()[/color]
[color=black] {[/color]
[color=black]//----[/color]
[color=black] [/color]
[color=black]//----[/color]
[color=black] return(0);[/color]
[color=black] }[/color]
[color=black]//+------------------------------------------------------------------+[/color]
[color=black]//| expert start function |[/color]
[color=black]//+------------------------------------------------------------------+[/color]
[color=black]int start()[/color]
[color=black] {[/color]
[color=black] [/color]
[color=black] if(Time[0]==Tim)return(0)[/color]
[color=black] double cCLOSE = iClose(NULL, 0, 1); [/color]
[color=black] double pCLOSE = iClose(NULL, 0, 2);[/color]
[color=black] double BP=iHigh(NULL,0,1);[/color]
[color=black] double SP=iLow(NULL,0,1); [/color]
[color=black] double SLB=iLow(NULL,0,1);[/color]
[color=black] double SLS=iHigh(NULL,0,1);[/color]
[color=black] double cma5m=iMA(NULL,0,200,0,MODE_SMA,PRICE_CLOSE,1); [/color]
[color=black] double pma5m=iMA(NULL,0,200,0,MODE_SMA,PRICE_CLOSE,2);[/color]
[color=black] [/color]
[color=black]{[/color]
[color=black] if(cCLOSE>cma5m && pCLOSE<pma5m) [/color]
[color=black] OrderSend(Symbol(),OP_BUYSTOP,Lots,BP,3,SLB,Ask+TakeProfit*Poin,"",MagicNumber,0,Green); [/color]
[color=black] if(cCLOSE<cma5m && pCLOSE>pma5m)[/color]
[color=black] OrderSend(Symbol(),OP_SELLSTOP,Lots,SP,3,SLS,Bid-TakeProfit*Poin,"",MagicNumber,0,Red);[/color]
[color=black] return(0);[/color]
[color=black] }[/color]
[color=black] [/color]
[color=black]//---------------------------------[/color]
[color=black] return(0);[/color]
[color=black] }[/color]
[color=black] [/color]
[color=black]//+-------- [/color]
[color=black][/color]
[color=black][/color]
جرب هذا اخوي :)
شكرا على الكود و على الشرح .......... اللي حتضيفه:asvc:........... ممكن ........بليز:hands:
رد: مشكلة تكرار فتح الصفقات على نفس الشمعة
اقتباس:
المشاركة الأصلية كتبت بواسطة alshakatan
شكرا على الكود و الشرح
سؤال / عند إضافة
كود PHP:
(OrderMagicNumber()==MagicNumber && Symbol()==OrderSymbol() && OrderType() == OP_BUY)
هل سيكون الأمر لصفقات الشراء المفتوحة فقط ؟؟ و على ذلك نقيس ؟؟
صحيح، بهذه الطريقة سوف يبحث عن طلبات الشراء فقط... ولكن يجب عليك ايضاً كتابة
الوظيفة نفسها للبحث في طلبات البيع. وهذا الطريقة في البرمجة لا ينصح بها.
والطريقة المثالية في هذه الحالة هو استدعاء وظيفة OrderIsActive معParameter
مثال على ذلك،
كود:
void start()
{
if (OrderIsActive(OP_BUY))
TrailingStop();
else
ProcessOrder();
.
.
.
}
bool OrderIsActive(int ordertype)
{
for(int i=0;i<OrdersTotal();i++) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderMagicNumber()==MagicNumber && Symbol()==OrderSymbol() && OrderType()==ordertype)
return(true);
}
return(false);
}
اتمنى ان تكون حصلت على مرادك.
بالتوفيق
رد: مشكلة تكرار فتح الصفقات على نفس الشمعة
اقتباس:
المشاركة الأصلية كتبت بواسطة Dr.Aoudi
السلام عليكم ...
اخي صانع القرار .. انا موجود .. :) قمت بوضع بصناعة اكسبرت ووضعته هنا في المنتدى ..
Tripple K
كانت النتائج مذهلة في الباك تست اما في الحقيقي فكانت النتائج عكس ذلك تماما :) فشل .. المهم انا موجود دائما .. ارد على المواضيع التي لي باع فيها والتي لا استطيع ان اخدم فيها فلا ارد :)
بالنسبة لموضوع الاخ .. معك حق اخي .. الكود الذي وضعته انا هو مجرد فكرة .. يعني يمكن للاخ المبرمج وضع الكود في المكان المناسب .. ولكن انا اخبره بفكرة انه يمكن استخدام هذا الكود لتنفيذ الاوامر بعد افتتاح شمعو جديدة ...
شكرا اخي على سؤالك :)
واتمنى ان يصل كاتب الموضوع لمراده :)
تحياتي لكم جميعا
حياك الله اخي الكريم وابقاك، واتمنى لك التوفيق دائماً في كل مشاريع. ان شاء الله نكون في تواصل مستمر... والله يديم المحبة.