شكراً لك أخي محمود
وزادك الله من علمه وفضله
Printable View
اخواني الكرام
لنفرض اننا على شارت الباوند دولار ، ونريد ان نفتح صفقة شراء لزوج اليورو ين مثلاً
استخدمت الدالة marketinfo كالتالي
وهي تعطينا سعر الشراء الحالي لزوج اليورو ينكود PHP:marketinfo("EURJPY",mode_ask)
وباستخدام دالة ordersend ممكن ان نفتح صفقة شراء لزوج اليورو ين (لايف) ، طبعاً كل ذلك ونحن على شارت الباوند دولار
المشكلة انه في الباك تيست لا يفتح الاكسبيرت أي صفقة ، أما في (لايف) فهو يفتح الصفقات بشكل طبيعي
اين المشكلة بالضبط؟
اخواني المبرمجين
اريد اكواد اقفال صفقات البيع والشراء لتقاطعات الموفق افرج
وشكرا
شكرا
أتمنى تعديل المؤشر التالي ليكون صالح للباك تيست أي يظهر الأسابيع الماضية أيضاً....مشكورين
السلام عليكم
ارجو من الاخوة المبرمجين المساعدة في كود اكسبيرت اتعبني
بالحقيقة انا لست خبير بالبرمجة ولكني احاول التعلم قدر الامكان
الفكرة هي الدخول في صفقة حسب اشارة الماكد اذا كانت اكبر من قيمة يتم تحديدها من الخارج والبيع بالعكس
فاذا تحقق الهدف فالحمدلله
واذا اغلقت الصفقة خاسرة يقوم بالدخول بعقد مضاعف عند تحقق شروط دخول جديدة بيع او شراء
حسب الفرصة التالية
وهكذا حتى يتم تحقيق الهدف لاخر مضاعفة ثم يبدأ من جديد
الكود مرفق2-اضافة خاصية ايقاف الاكسبيرت عن العمل في فترة زمنية يتم تحديدها من الخارج مثلا من الساعة كذا الى الساعة كذا(لعدم زيادة المضاعفات في فترة التذبذب (الفترة الاسيوية ونهاية الامريكية))
المطلوب فضلا لا امرا
1- اضافة خاصية المضاعفة .
والشكر مقدما مع خالص الدعاء
كود:extern double TakeProfit = 30;
extern double StopLoss = 30;
extern double Lots = 0.1;
extern double TrailingStop = 20;
extern double MACDByeLevel = 0.001;
extern double MACDSellLevel = -0.001;
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start()
{
double MacdCurrent, MacdPrevious;
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(0);
}
if(TakeProfit<10)
{
Print("TakeProfit less than 10");
return(0); // check TakeProfit
}
// to simplify the coding and speed up access
// data are put into internal variables
MacdCurrent=iMACD(NULL,0,5,13,1,PRICE_CLOSE,MODE_MAIN,0);
MacdPrevious=iMACD(NULL,0,5,13,1,PRICE_CLOSE,MODE_MAIN,1);
total=OrdersTotal();
if(total<1)
{
// no opened orders identified
if(AccountFreeMargin()<(1000*Lots))
{
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
if(MacdCurrent>MACDByeLevel && MacdPrevious<MacdCurrent)
{
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(0);
}
// check for short position (SELL) possibility
if(MacdCurrent<MACDSellLevel && MacdPrevious>MacdCurrent)
{
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());
return(0);
}
return(0);
}
// it is important to enter the market correctly,
// but it is more important to exit it correctly...
for(cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL && // check for opened position
OrderSymbol()==Symbol()) // check for symbol
{
if(OrderType()==OP_BUY) // long position is opened
{
// should it be closed?
if(Bid < OrderOpenPrice()-Point*StopLoss)
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close position
return(0); // exit
}
// check for trailing stop
// check for trailing stop
if(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>Point*TrailingStop)
{
if(OrderStopLoss()<Bid-Point*TrailingStop)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
return(0);
}
}
}
}
else // go to short position
{
// should it be closed?
if(Ask > OrderOpenPrice()+ Point*StopLoss)
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // close position
return(0); // exit
}
// check for trailing stop
if(TrailingStop>0)
{
if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
{
if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
return(0);
}
}
}
}
}
}
return(0);
}
// the end
الأخوة الأعزاء من لديها كود مؤشر ADXcrosses وجزاه الله كل خير
الاخوة الاعزاء لدى مشكلة
اكسبرت فى الباك تيست يعمل و لكن فى الحساب الديمو يرجع 2008.06.03 16:55:57 SIMULATOR-2 EURUSD,M5: Error opening SELL order : 130
الخطأ 130 يعنى فى تحديد الستوب لوز (وانا لم احدد استوب لوز).
نفس الاكسبرت بة رسالة خطأ ظهرت ولم افمها وهى2008.06.03 16:57:29 TestGenerator: unmatched data error (volume limit 18 at 2008.05.23 21:45 exceeded)
ارجو ان يتفضل احد الافاضل بالرد
اخواني الكرام اريد ان اغلق كل الصفقات عند تحقيق 15 نقطة وضعت الكود التالي ولكن يعطيني خطا
close_all is fonct not defined
الكود الذي وضعته
ولكم مني جزيل الشكركود PHP:double floatprofit = AccountEquity()-AccountBalance();
if (floatprofit=15) Close_All();