في هذا الموضوع التعليمي يوجد نماذج لأكسبيرتات فيها مضاعفات اطلع عليها ستفيدك لبرمجة ماتريد
Printable View
سؤالي
لماذا نحصل على جوده باك تيست اقل من 90% عند اختيار فريم الدقيقه وعند الفريمات الاخرى نحصل على 90% .....وياريت تجرب ذلك بنفسك هل حصلت على 90% عند فريم الدقيقه؟ ماسبب تفسير هذا الامر برغم ان السعر في فريم الدقيقه يتحرك بشكل ادق من الفريمات الاخرى
إذا كانت الداله تحسب رقم التيكيت من صفقات الهيستوري وبما أن الصفقات تظل موجوده دائما سواء في الهيستوري أو الصفقات المفتوحه فبالتالي سوف يظل رقم التيكيت محفوظ
نعم يمكن عمل باك تست و السوق مغلق فالباك تست يعمل على البيانات التاريخيه وليس له علاقة حتى لو كانت المنصه غير متصلة بالنت لكن طبعا حاول التأكد من عدد نقاط الإسبريد التي قمت بتحديدها ربما السبب منها
فكرة أن فريم الدقيقة يتحرك بشكل أدق غير صحيح لأن البيانات المخزنه لا تعتمد على عدد التيكات و الحركه الفعليه للسعر لكن فقط هو سعر الإفتتاح و الإغلاق و الهاي واللو
و السبب الذي يجعل الفريم الأكبر أدق لأنه يعتمد على الفريم الأصغر في معركة حركة الشمعه ( الصعود و الهبوط ) لكن فريم الدقيقه لا يوجد فريم أقل منه ليأخذ حركة الشمعه منه بالتالي لا تحصل على جوده 90
% على فريم الدقيقه
ارجوا الرد من الاخ مستر دولار
https://forum.arabictrader.com/t202248.html
اساتذتي الاعزاء
في تمرين على الحلقات والدوال ..
كنت اريد ان اجعل الاستوب للشراء مثلا هو لو الشمعة السابقة
ثم يتحرك ليحدث نفسه مع كل شمعة جديدة
فكتبت دالة خارجية كالتالي
واستخدمت الامركود PHP:
double low_1(){
for(int i=OrdersHistoryTotal()-1; i>=0; i--){
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
if(OrderSymbol()==Symbol()){
return(Low[1]);
}
}
return(0);
}
وفعلا اتت بلو الشمعة (1) والتحديث مع كل شمعةكود PHP:
Comment (low_1());
// Comment (high_1());
ثم وضعت امر الشراء هكذا
.... ولكنه يفتح صفقات البيع والشراء مع الشروط دون وضع الاستوبكود PHP:
void Buy_Market()
{
double SL=0,TP=0,NewLot=Lot;
if(Stoploss>0) SL=Ask-Stoploss*points; else SL=low_1();
if(Takeprofit>0) TP=Ask+Takeprofit*points; else TP=0;
int ticket=OrderSend(Symbol(),OP_BUY,NewLot,Ask,30,SL,TP,"hre",MagicNo,0,clrGreen);
}
فما هو الخطأ الذي وقعت فيه ؟؟؟؟
... جزاكم الله كل خير ودعواتي لكم جميعا في عمرة 27 رمضان بكل خير وصحة وسعادة
تقبل الله منا جميعا الصيام والقيام وصالح الاعمال وجعلنا من عتقائه من النار بفضل شهره الفضيل .. آمين
السلام عليكم مشرفين ومبرمجين واعضاء وزوار هذا المنتدى الجميل
اساتذتي الكرام احاول عمل اكسبيرت اوامر معلقة بسيط
امر معلق شراء فوق السعر بعشرة نقاط
وامر بيع معلق اسفل السعر بعشرة نقاط
واذا اغلق احد الامرين لاي سبب (ربح او خسارة او اغلاق يدوي)
يتم فتحة مرة اخرى على نفس المسافة من السعر
لكن عند تجربة الاكسبيرة اجد انة احيانا يفتح صفقتين في نفس الاتجاة
الرجاء مساعدتي جزاكم الله خيرا
كود:extern double Distance =10; // ---- المسافة بين الامر المعلق والسعر
//اخذ الربح ووقف الخسارة وحجم العقد
extern string Order_Management;
extern int Take_Profit = 4;
extern int Stop_loss = 11;
extern double Manual_Lot = 0.1;
// رقم الماجيك للاكسبيرت
extern int Magic_Number = 1234;
//متغير قيمة النقطة
double A;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
double Ticksize = MarketInfo (Symbol(),MODE_TICKSIZE); //كود حساب قيمة النقطة
if(Ticksize == 0.00001 || 0.001)
A = Ticksize*10;
else
A = Ticksize;
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
//----------------------- SET BUY and SELL PRICE
double BuyLevel = Ask + Distance*Point;
double SellLevel = Bid - Distance*Point;
if(OrdersTotal() <= 1) //شروط الشراء
OrderSend(Symbol(),OP_BUYSTOP,Manual_Lot,BuyLevel,5,BuyLevel-Stop_loss*Point,BuyLevel+Take_Profit*Point,NULL,Magic_Number,0,Green);
if(OrdersTotal() <= 1) // شروط البيع
OrderSend(Symbol(),OP_SELLSTOP,Manual_Lot,SellLevel,5,SellLevel+Stop_loss*Point,SellLevel-Take_Profit*Point,NULL,Magic_Number,0,Red);
}
//+------------------------------------------------------------------+
انت عامل حاقة بتحبث في الهسيتوري ومالها علاقة بالهاي واللو وفي طلبك هذا لاتحتاج حلقة لتعود بالهاي أو اللو .
تفضل هذه الدالة وتستدعيها من قائمة OnTick واهم شئ لاتنساني من دعواتك في الحرم وربنا يتقبل منك .
كود PHP:
void ModifyOrdersSL(){
int ticket1=0,ticket=0;
double TP=0,TP1=0;
for(int i=0;i<OrdersTotal();i++){
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo){
ticket=OrderTicket(); TP=OrderTakeProfit();
if(OrderType()==OP_BUY&&OrderStopLoss()!=Low[1]){
bool adf=OrderModify(ticket,OrderOpenPrice(),Low[1],TP,0,Red);
}}}}
بارك الله فيك استاذي جميل . ولكني اريدة ان يفتح صفقتين واحدة شراء من فوق السعر والاخرى بيع من تحت السعر في نفس الوقت
ضع الشرط مرة واحدة فقط فأذا كان الشرط محقق يفتح أوردرين
كود PHP:
if(OrdersTotal() == 0)
{
OrderSend(Symbol(),OP_BUYSTOP,Manual_Lot,BuyLevel,5,BuyLevel-Stop_loss*Point,BuyLevel+Take_Profit*Point,NULL,Magic_Number,0,Green);
OrderSend(Symbol(),OP_SELLSTOP,Manual_Lot,SellLevel,5,SellLevel+Stop_loss*Point,SellLevel-Take_Profit*Point,NULL,Magic_Number,0,Red);
}
شكرا جزيلا استاذي جميل
استاذي جميل عند استعمالي لهذا الكود
وعند تجربتي للاكسبيرت فتح صفقات كتير
اعتقد بسبب انة لا يعتبر الصفقات المعلقات من ضمن هذا الشرط
فهل يوجد فلتر لفلترت فتح الصفقات المعلقة