بالتوفيق لك أخي الكريم
Printable View
شكرا اخوى مستر دولار على مساعدتك الدائمة,
عندى سؤال لك:
1-عند عمل باك تست على بعض الاكسبرتات بطريقة كنترول بوينت و ايفرى تيك نجد النتائج متضاربة وليست حتى قريبة من بعضهما واجد ان الاكسبرت ينفذ بعض الاوامر الموجودة بداخله بطريقة صحيحة بطريقة كنترول بوينت ولا ينفذ نفس الاوامر بطريقة ايفرى تيك .
ومثال على اختلاف النتائج تماما باستخدام الطريقتين اكسبرتك المرفق (البارابوايك).
و انتظر ردك اخوى.
طبعا ليس للإكسبرت علاقة في هذا الموضوع
لكن راجع هذا الموضوع سيفسر لك السبب بشكل كامل وتفصيلي
http://articles.mql4.com/70
جزاك الله خيراً يا باشا
السلام عليكم ورحمة اللة وبركاتة
اخي مستر دولار عندي سؤال لو سمحت وهو
ما هو الامر الزي يمكن بواسطتة معرفة السعر الزي تمت بة العملية مثال علي ذلك
لو قمت بعملية شراء عند سعر 1.23234 فبتالي يظهر هذا السعر في قائمة Trade تحت مسمي Price فكيف استعيد هذا السعر في البرنامج مع العلم ان Ask هو السعر الحالي ويكون متغير ولك جزيل الشكروالاحترام
وعليكم السلام ورحمة الله وبركاته
سوف تحتاج إلى عمل دالة لمعرفة سعر فتح الصفقه
كود PHP:double OpenPrice(){
for(int i=0;i<=OrdersTotal();i++){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
double P=OrderOpenPrice();
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber){
return(P);
}
}
}
الف شكر يا باشا
بس ممكن توضح بمثال لان الكود يعطيني خطاءعند كتابتة
ولك جزيل الشكر
السلام عليكم ورحمة الله وبركاته
اخي هذا اكسبرت يعتمد على المتوسطات مع مضاعفة الصفقات
كود PHP:extern double lTakeProfit = 20;
extern double sTakeProfit = 20;
extern double lTrailingStop = 20;
extern double sTrailingStop = 10;
extern color clOpenBuy = Blue;
extern color clCloseBuy = Aqua;
extern color clOpenSell = Red;
extern color clCloseSell = Violet;
extern color clModiBuy = Blue;
extern color clModiSell = Red;
extern string Name_Expert = "escape";
extern int Slippage = 1;
extern bool UseSound = true;
extern bool FractionalPips = true;
extern string NameFileSound = "Alert.wav";
extern double Lots = 0.1;
void deinit() {
Comment("");
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start(){
if(Bars<100){
Print("bars less than 100");
return(0);
}
if (Digits==3 || Digits==5)
if(lTakeProfit<10){
Print("TakeProfit less than 10");
return(0);
}
if(sTakeProfit<10){
Print("TakeProfit less than 10");
return(0);
}
double diClose0=iClose(NULL,5,0);
double diMA1=iMA(NULL,5,5,0,MODE_SMA,PRICE_OPEN,0);
double diClose2=iClose(NULL,5,0);
double diMA3=iMA(NULL,5,4,0,MODE_SMA,PRICE_OPEN,0);
if(AccountFreeMargin()<(1000*Lots)){
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
if (!ExistPositions()){
if ((diClose0<diMA1)){
OpenBuy();
return(0);
}
if ((diClose2>diMA3)){
OpenSell();
return(0);
}
}
TrailingPositionsBuy(lTrailingStop);
TrailingPositionsSell(sTrailingStop);
return (0);
}
bool ExistPositions() {
for (int i=10; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Symbol()) {
return(True);
}
}
}
return(false);
}
void TrailingPositionsBuy(int trailingStop) {
for (int i=10; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Symbol()) {
if (OrderType()==OP_BUY) {
if (Bid-OrderOpenPrice()>trailingStop*Point) {
if (OrderStopLoss()<Bid-trailingStop*Point)
ModifyStopLoss(Bid-trailingStop*Point);
}
}
}
}
}
}
void TrailingPositionsSell(int trailingStop) {
for (int i=10; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Symbol()) {
if (OrderType()==OP_SELL) {
if (OrderOpenPrice()-Ask>trailingStop*Point) {
if (OrderStopLoss()>Ask+trailingStop*Point ||
OrderStopLoss()==0)
ModifyStopLoss(Ask+trailingStop*Point);
}
}
}
}
}
}
void ModifyStopLoss(double ldStopLoss) {
bool fm;
fm = OrderModify(OrderTicket(),OrderOpenPrice
(),ldStopLoss,OrderTakeProfit(),0,CLR_NONE);
if (fm && UseSound) PlaySound(NameFileSound);
}
void OpenBuy() {
double ldLot, ldStop, ldTake;
string lsComm;
ldLot = GetSizeLot();
ldStop = 0;
ldTake = GetTakeProfitBuy();
lsComm = GetCommentForOrder();
OrderSend(Symbol
(),OP_BUY,ldLot,Ask,Slippage,ldStop,ldTake,lsComm,0,0,clOpenBuy);
if (UseSound) PlaySound(NameFileSound);
}
void OpenSell() {
double ldLot, ldStop, ldTake;
string lsComm;
ldLot = GetSizeLot();
ldStop = 0;
ldTake = GetTakeProfitSell();
lsComm = GetCommentForOrder();
OrderSend(Symbol
(),OP_SELL,ldLot,Bid,Slippage,ldStop,ldTake,lsComm,0,0,clOpenSell);
if (UseSound) PlaySound(NameFileSound);
}
string GetCommentForOrder() { return(Name_Expert); }
double GetSizeLot() { return(Lots); }
double GetTakeProfitBuy() { return(Ask+lTakeProfit*Point); }
double GetTakeProfitSell() { return(Bid-sTakeProfit*Point); }
اريد ان اغير عمله عن طريق المتوسطات وجعله كالآتي :
طريقة النيجري
اعدادات المؤشر
1- اعدادات موشر الزجزاج (28،5،3)
2- اعدادات موشر الماكد (21،89،1)
3- التعديل فى موشر cci انة يوجد اثنين الاول اعدادتة (34) والثانى (46) مع عمل 3 مستويات الصفر و100 و (-100)
شروط الدخول شراء
1- موشر الزجزاج كون قاع
2- موشر الماكد فوق الصفر
3- اختراق موشر (cci 34 / 46 ) لخط الصفر او المائة بعد تكون قاع الزجزاج
4- الهدف هو تحقيق خمس نقاط
5- لا يوجد استوب لوس ولكن اذا كون الزجزاج قمة ولم يتم تحقيق الهدف يتم الخروج
6- اذا تحقق الهدف من الصفقة الاولى ولم يكون موشر الزجزاج للقمة وعند تحقق الشرط الاول والثانى ولكن بشرط ان موشرى (cci36/46) اخترق خط الصفر فى المرة الاولى ثم اخترق الموشرين لخط المائة فى المرة الثانية يتم الدخول مرة اخرى بهدف خمس نقاط واذا كون الزجزاج القمة ولم يتم تحقيق الهدف يتم الخروج
فى حالة البيع العكس واختراق موشرى cci لخط الصفر او (-100)
فى طريقة دخولة للصفقات ان اذا دخل فى صفقة و انعكست علية فانة يدخل مرة تانية فى اتجاة الصفقة الاولى اذا كانت محققة لنفس الشروط (نفس التجاة)
و الهدف قمة الشمعة التى انعكست علية
اريد منك جزاك الله خير وضع الأمر البرمجي لكي اتعلم تغير الإكسبرتات
ولنبدا حبة حبة :asvc:
السلام عليكم ارجو معرفه سمعت ان هناك بعض البرامج لعمل الاكسبرتات هل هذه البرامج مفيده وشكرا واين استطيع الحصول عليها وشكرا