النتائج 2,341 إلى 2,355 من 10335
الموضوع: موضوع مخصص للأسئلة البرمجية
- 27-06-2012, 02:39 PM #2341
رد:موضوع مخصص للأسئلة البرمجية
متشكر يا أستاذ أسامة
لكن ماشتغلش الكود كده واعتقد إن بدل المتغير pr لازم نعمله price أو بدل price نعملها pr صح
لما عدلتها بالشكل ده
كود PHP:double price;
int digits;
int u;
int d;
//----------------------------------------------------------
int init()
{
if(Digits>3){
digits=4;
}
else {
digits=2;
}
return(0);
}
//----------------------------------------------------------
int start()
{
string price=DoubleToStr(Bid,Digits);
double bid=StrToDouble(StringSubstr(price,0,digits));
if (bid > price)u++;
if (bid < price)d++;
price=bid;
Comment("عدد التكات الصاعدة = ",u,"\n","عدد التكات الهابطة = ",d);
return(0);
}
وانا عملت الكود كامل عشان تتوضح الفكرة أكتر وربنا يكرمك ويجزيك الخير
- 27-06-2012, 07:36 PM #2342
رد:موضوع مخصص للأسئلة البرمجية
استاذ اسامة ، النسخة بالمرفقات هى آخر نسخة أعمل عليها حاليـا وهى الآن تعمل بشكل أفضل من قبل على منصة FXDD ، ولكن ظهرت بعض الأخطـاء مثل invalid ticket for OrderModify function
وبعض الصفقـات ايضـا لايتم وضع التارجت والاستوب لها اى لايحدث مودفاى للأوردر .
- 28-06-2012, 01:33 AM #2343
- 28-06-2012, 01:37 AM #2344
تفضل
كود PHP:double price;
int digits;
int u;
int d;
//----------------------------------------------------------
int init()
{
if(Digits>3){
digits=4;
}
else {
digits=2;
}
return(0);
}
//----------------------------------------------------------
int start()
{
string pr=DoubleToStr(Bid,Digits);
double bid=StrToDouble(StringSubstr(pr,0,digits));
if (bid > price)u++;
if (bid < price)d++;
price=bid;
Comment("عدد التكات الصاعدة = ",u,"\n","عدد التكات الهابطة = ",d);
return(0);
}
- 28-06-2012, 01:41 AM #2345
هذا الخطأ قد يحدث عندما تحاول فتح صفقه لكن يحدث خطأ ولا تفتح الصفقه ثم تستخدم بعدها الأمر
كود PHP:if(TP!=OrderTakeProfit()||SL!=OrderStopLoss())
{
OrderModify(ticket,OrderOpenPrice(),NormalizeDouble(SL,digits),NormalizeDouble(TP,digits),0,Red);
}
فقم بوضع شرط إضافي
كود PHP:if(TP!=OrderTakeProfit()||SL!=OrderStopLoss()&&ticket>0)
{
OrderModify(ticket,OrderOpenPrice(),NormalizeDouble(SL,digits),NormalizeDouble(TP,digits),0,Red);
}
- 28-06-2012, 10:24 AM #2346
رد:موضوع مخصص للأسئلة البرمجية
شكرا يا أستاذ أسامة
ده نفس الكود الأول
المرة دي شغتله وبرضه العداد ماشتغلش لكن سبته فترة أطول وعملت تصغير للمنصة ورجعت رفعتها لقيته عد فعلا لكن قعدت راقبته لقيته وقف عد صغرت المنصة ورجعت فتحتها لقيته العدد زاد
وانا آسف بجد الجزء ده ماعرفش عنه حاجة
كود PHP:string pr=DoubleToStr(Bid,Digits);
double bid=StrToDouble(StringSubstr(pr,0,digits));
حاجة تانية مهمة يا أستاذ أسامة
إحنا حاليا بنخفي الخانة الخامسة مش بنشيلها مش كده ؟
طيب لو الكود بدأ والسعر كان 1.25123 والمتغير نوعه double وخفينا الخانة الأخير هيبقى الرقم كده 1.2512 ولا 1.2513
الأقرب إنه يعمله 1.2512 صح ولو عمله كده فعلا ياترى لما يوصل السعر للـ 1.25126 هتبقى القيمة 1.2513
ولا هيستنى 10 أجزاء كاملة عشان يعملها نقطة يعني لو بدأ زي ماقلنا من عند 1.25123 هيستنى 1.25133 وقتها يزود 1 في العداد
انا محتاج 10 أجزاء كاملة ربنا يكرمك يا أستاذ أسامة
تحياتي
- 28-06-2012, 02:48 PM #2347
السلام عليكم اخي اسامة ... تم الرد على تساؤلاتك في موضوعي https://forum.arabictrader.com/t141767.html
الله يبارك فيك
- 28-06-2012, 07:42 PM #2348
رد:موضوع مخصص للأسئلة البرمجية
بعد عمل التعديل لم تظهر رسالة الخطـأ ورسالة OrderSend Error 129 نادرا ماتظهر الآن على منصة FXDD ، ولكن عند العمل على منصة 4 أرقام مثل Windsor بعض الصفقات لايتم عمل مودفاى للتارجت والاستوب لها وخاصة مع زوج GBPJPY !!
هل يوجد كود فـ الاكسيبرت يمنع عمل مودفاى للتارجت والاستوب على منصة الـ 4 أرقـام !!
- 28-06-2012, 08:15 PM #2349
شكرا لك على سرعة الرد
مرفق المؤشر والطريقة اني عاوز المؤشر يتأخر في الظهور شمعة او شمعتين او اكثر حسب الاختيار
يعني يعطي أهمية واعتبار للتغير للأسعار القديمة واضافة متغير TextShift يمكنك منه
تحديد مكان وضع السعر سواء جعلها للأمام أو للخلف بحيث نجعل مكان الخط مثلا 3 شمعات للأمام
وإذا جعلتها -3 سوف يجعلها 3 شمعات إلى الخلف كي تعمل على سلسلة كل شمعه
فإذا عاوز على 21 أعطانا متوسط 21 .. او اذا اردنا للخلف نعمل -21
يعني يعطي اهمية اقفال الشمعة التي قبل الشمعة الحالية
أي أن " نهاية "خط المتوسط تعطي قراءة متوسط 21 يوم قبلها
يمكن يكون شرحي غير واضح ولكن معليش استحملني شوي ......
كود://---- indicator settings #property indicator_chart_window #property indicator_buffers 3 #property indicator_color1 Yellow #property indicator_color2 Blue #property indicator_color3 Red #property indicator_width1 1 #property indicator_width2 1 #property indicator_width3 1 #property indicator_style1 STYLE_SOLID #property indicator_style2 STYLE_DOT #property indicator_style3 STYLE_DOT //---- input parameters extern int eintTimeframe = 0; extern int eintHalfLength = 56; extern double edblAtrMultiplier = 2.0; extern int eintAtrPeriod = 100; extern int eintBarsToProcess = 0; extern bool eblnAlerts = false; extern color gc_Mid = Yellow; extern color gc_Upper = Blue; extern color gc_Lower = Red; //---- indicator buffers double gadblMid[]; double gadblUpper[]; double gadblLower[]; int gintTF = 0; datetime gdtLastAlert = 0; int gi_PipsDecimal; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { if ( eintTimeframe == 0 ) gintTF = Period(); else gintTF = eintTimeframe; gdtLastAlert = 0; IndicatorBuffers( 3 ); IndicatorDigits( 5 ); SetIndexBuffer( 0, gadblMid ); SetIndexLabel( 0, "TMA Mid" ); SetIndexBuffer( 1, gadblUpper ); SetIndexLabel( 1, "TMA Upper" ); SetIndexBuffer( 2, gadblLower ); SetIndexLabel( 2, "TMA Lower" ); //---- name for DataWindow and indicator subwindow label IndicatorShortName( "TmaTrue(" + eintHalfLength + ",M" + gintTF + ")" ); gi_PipsDecimal = Get_Pips_Decimal(); return( 0 ); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { ObjectDelete("!Mid"); ObjectDelete("!Upp"); ObjectDelete("!Low"); ObjectDelete("!Range"); return( 0 ); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int counted_bars = IndicatorCounted(); if (counted_bars < 0) return (-1); if (counted_bars > 0) counted_bars--; int intLimit = Bars - counted_bars; double dblTma, dblUpper, dblLower, dblRange; int intBarShift; if ( eintBarsToProcess > 0 && intLimit > eintBarsToProcess ) intLimit = eintBarsToProcess; for( int inx = intLimit; inx >= 0; inx-- ) { if ( gintTF == Period() ) { dblRange = iATR( Symbol(), gintTF, eintAtrPeriod, inx+10 ); dblTma = calcTma( eintHalfLength, inx ); } else { intBarShift = iBarShift( Symbol(), gintTF, Time[inx] ); dblRange = iATR( Symbol(), gintTF, eintAtrPeriod, intBarShift+10 ); dblTma = calcTmaMtf( gintTF, eintHalfLength, intBarShift, Close[inx] ); } gadblMid[inx] = dblTma; gadblUpper[inx] = dblTma + ( edblAtrMultiplier * dblRange ); gadblLower[inx] = dblTma - ( edblAtrMultiplier * dblRange ); } if ( eblnAlerts && gdtLastAlert < Time[1] ) { if ( ( Close[1] > gadblUpper[1] ) && ( Close[2] < gadblUpper[2] ) ) { Alert( Symbol(), " - M", Period(), " - ", TimeToStr( Time[1], TIME_DATE|TIME_MINUTES ), " closed above upper TMA." ); gdtLastAlert = Time[1]; } if ( ( Close[1] < gadblLower[1] ) && ( Close[2] > gadblLower[2] ) ) { Alert( Symbol(), " - M", Period(), " - ", TimeToStr( Time[1], TIME_DATE|TIME_MINUTES ), " closed below lower TMA." ); gdtLastAlert = Time[1]; } } // Calculate the distances between bid & bands double ld_Dist.Pts, ld_Dist.Pips; // Distance to mid ld_Dist.Pts = MathAbs(Bid - gadblMid[0]); ld_Dist.Pips = Convert_2_Pips(ld_Dist.Pts); ObjectCreate("!Mid",OBJ_TEXT,0,0,0); ObjectSet("!Mid",OBJPROP_TIME1,Time[0]+(3*Period()*60)); ObjectSet("!Mid",OBJPROP_PRICE1,gadblMid[0]); ObjectSetText("!Mid",DoubleToStr(ld_Dist.Pips,gi_PipsDecimal),8,"Arial",gc_Mid); // Distance to upper ld_Dist.Pts = MathAbs(Bid - gadblUpper[0]); ld_Dist.Pips = Convert_2_Pips(ld_Dist.Pts); ObjectCreate("!Upp",OBJ_TEXT,0,0,0); ObjectSet("!Upp",OBJPROP_TIME1,Time[0]+(3*Period()*60)); ObjectSet("!Upp",OBJPROP_PRICE1,gadblUpper[0]); ObjectSetText("!Upp",DoubleToStr(ld_Dist.Pips,gi_PipsDecimal),8,"Arial",gc_Upper); // Distance to lower ld_Dist.Pts = MathAbs(Bid - gadblLower[0]); ld_Dist.Pips = Convert_2_Pips(ld_Dist.Pts); ObjectCreate("!Low",OBJ_TEXT,0,0,0); ObjectSet("!Low",OBJPROP_TIME1,Time[0]+(3*Period()*60)); ObjectSet("!Low",OBJPROP_PRICE1,gadblLower[0]); ObjectSetText("!Low",DoubleToStr(ld_Dist.Pips,gi_PipsDecimal),8,"Arial",gc_Lower); // Display the total range of the bands ld_Dist.Pts = MathAbs(gadblUpper[0] - gadblLower[0]); ld_Dist.Pips = Convert_2_Pips(ld_Dist.Pts); Object_Create("!Range",5,5,"TMA Range: "+DoubleToStr(ld_Dist.Pips,gi_PipsDecimal),1,"Arial",gc_Mid); return( 0 ); } //+------------------------------------------------------------------+ //| calcTma() | //+------------------------------------------------------------------+ double calcTma( int intHalfLength, int intShift ) { double dblResult, dblSum, dblSumW, dblRange; int inx, jnx, knx; dblSumW = intHalfLength + 1; dblSum = dblSumW * Close[intShift]; jnx = intHalfLength; for ( inx = 1, jnx = intHalfLength; inx <= intHalfLength; inx++, jnx-- ) { dblSumW += jnx; dblSum += ( jnx * Close[intShift+inx] ); } dblResult = dblSum / dblSumW; return( dblResult ); } //+------------------------------------------------------------------+ //| calcTmaMtf() | //+------------------------------------------------------------------+ double calcTmaMtf( int intTF, int intHalfLength, int intUpperTfShift, double dblClose ) { double dblResult, dblSum, dblSumW, dblRange; int inx, jnx, knx; // This is the current bar dblSumW = intHalfLength + 1; dblSum = dblSumW * dblClose; jnx = intHalfLength; for ( inx = 1, jnx = intHalfLength; inx <= intHalfLength; inx++, jnx-- ) { dblSumW += jnx; dblSum += ( jnx * iClose( Symbol(), intTF, intUpperTfShift+inx ) ); } dblResult = dblSum / dblSumW; return( dblResult ); } //+------------------------------------------------------------------+ //| create screen objects | //+------------------------------------------------------------------+ void Object_Create(string ps_name,int pi_x,int pi_y,string ps_text=" ",int pi_size=12, string ps_font="Arial",color pc_colour=CLR_NONE) { //---- // if (colour==CLR_NONE) colour=xcBackground; ObjectCreate(ps_name,OBJ_LABEL,0,0,0,0,0); ObjectSet(ps_name,OBJPROP_CORNER,3); ObjectSet(ps_name,OBJPROP_COLOR,pc_colour); ObjectSet(ps_name,OBJPROP_XDISTANCE,pi_x); ObjectSet(ps_name,OBJPROP_YDISTANCE,pi_y); ObjectSetText(ps_name,ps_text,pi_size,ps_font,pc_colour); //---- return(0); } //+------------------------------------------------------------------+ //| convert to points | //+------------------------------------------------------------------+ double Convert_2_Pts(double pd_Pips) { //---- int pd_Points=pd_Pips; // Default - no conversion if (Digits == 5 || (Digits == 3 && StringFind(Symbol(), "JPY") != -1)) pd_Points=pd_Pips*10; if (Digits == 6 || (Digits == 4 && StringFind(Symbol(), "JPY") != -1)) pd_Points=pd_Pips*100; //---- return(pd_Points); } //+------------------------------------------------------------------+ //| convert to pips | //+------------------------------------------------------------------+ double Convert_2_Pips(double pd_Points) { //---- double pd_Pips=pd_Points/Point; // Default - no conversion if (Digits == 5 || (Digits == 3 && StringFind(Symbol(), "JPY") != -1)) { pd_Pips=pd_Points/Point/10; } if (Digits == 6 || (Digits == 4 && StringFind(Symbol(), "JPY") != -1)) { pd_Pips=pd_Points/Point/100; } //---- return(pd_Pips); } //+------------------------------------------------------------------+ //| get the pips decimal places | //+------------------------------------------------------------------+ int Get_Pips_Decimal() { //---- int pi_PipsDecimal = 0; // Default - no decimals if (Digits == 5 || (Digits == 3 && StringFind(Symbol(), "JPY") != -1)) { pi_PipsDecimal = 1; } if (Digits == 6 || (Digits == 4 && StringFind(Symbol(), "JPY") != -1)) { pi_PipsDecimal = 2; } //---- return(pi_PipsDecimal); }
- 28-06-2012, 08:50 PM #2350
معنى الكود :
في البدايه أنا أريد حذف الرقم العشري الخامس إذا إستخدمت
كود PHP:NormalizeDouble(Bid,digits);
لكن أنا أريد كود لا يقوم بتقريب السعر وفقط يحذف الرقم العشري الخامس لذلك إستخدمت
كود PHP:StringSubstr(pr,0,digits)
كود PHP:string pr=DoubleToStr(Bid,Digits);
digits عدد الحروف التي سيحسبها فإذا كان السعر أربع أرقام عشريه سوف يأخذ أول أربع حروف فقط وإذا كان رقمين عشريين سوف يأخذ أول رقمين فقط
يوجد تعديل فقط في الكود سوف تجعل
كود PHP:double bid=StrToDouble(StringSubstr(pr,0,digits+2));
لنفرض أن السعر هو 1.45378
قيمة digits سوف تكون 4
لذلك عندما يحسب أول أربع أرقام من النص فسوف يصبح 1.45 فالمفروض أن القيمه تصبح أربع أرقام
عشريه + الرقم الصحيح والفاصله
في اليورو ين سوف تغير هذا الرقم لإنه يوجد قبل الفاصله 3 أرقام وليس رقمين
----------
يمكنك بدلا من أن تعقد الأمور بهذه الطريقه ضع عداد فرعي يحسب كل تيك بناء على الخمس أرقام عشرية وعندما يكتمل الرقم 10 بما إنك تريد حساب نقطة كل عشر أجزاء تزيد قيمة العداد الأصلي 1
ثم تصفر العداد الفرعي ويبدأ العد من جديد وهكذا
- 28-06-2012, 09:02 PM #2351
جزاك الله عني كل خير يا أستاذ أسامة
جاري التجربة
- 28-06-2012, 09:12 PM #2352
الحمد لله رب العالمين
فهمت الكود وإتعلمت حاجة جديدة يا أستاذ أسامة
لكن بالنسبة للغاية ماتحققتش زي ماكنت متوقع لما يكون السعر مثلا 1.25381 وينزل للـ 1.25379 بيزود نقطة
هحاول أعمل فكرة العداد الفرعي لكن لو حضرتك لسه موجود والفكرة جاهزة ياريت تنزلهالي عشان الوقت ربنا يكرمك
تحياتي
- 28-06-2012, 10:20 PM #2353
- 29-06-2012, 12:21 AM #2354
مستردولار المحترم فضلا وليس امرا
عندما اقول هذه المعادله على برنامج فكسول
iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0)
هل المقصود هيستوجرام في الماكد حيث هو اللون الاول والشركه ليس بها خطين
- 29-06-2012, 07:22 AM #2355
رد:موضوع مخصص للأسئلة البرمجية
تمام أخي أسامه فعلا كانت الفاصله المنقوطه هي السبب .. و بارك الله فيك
الآن أخي أنا إنتهيت من الإكسبيرت وعندما بدأت أجربه على الديمو لأضع مستويين أفقيين أحدهما أعلى السعر و الآخر أسفله لأرى كيف يضع الأوامر و جدت الإكسبيرت يفعل فقط أمر السيل ستوب و يقوم بوضع كميه كبيره من الأوامر السيل ستوب و المشكله الأخرى أنه يقوم بوضع الأمر من نقطه خاطئه ..
فقد إستخدمت التعريفات التاليه :
كود PHP:
double line1=ObjectGet("buy",OBJPROP_PRICE1);
double line2=ObjectGet("sell",OBJPROP_PRICE1);
///---
double sp=(Spread*point);
double pips=(PipsFromLine*point);
double buy=(line1+sp+pips);
double pips2=(PipsFromLine*point) ;
double sell=(line2-pips2);
كود PHP://////////// 1- put the buy sop///////////
if (MyBuyPendingOrdersTotal(MagicNumber)==0 && USE_BUYSTOP==TRUE && Time0!=Time[0]) {
if((TimeCurrent()-LastClosedOrderTime())/60/60>=9999)
{
if(StopLoss==0||HideSL){SL=0;}else{SL=Ask-StopLoss*point;}
if(TakeProfit==0||HideTP){TP=0;}else{TP=Ask+TakeProfit*point;}
if(UseRecTP)TP=(Ask+TP_R);
if(UseRecSL)SL=(Ask-SL_R);
OrderSend(Symbol(),OP_BUYSTOP,Lots1,buy,3,SL,TP,"first",MagicNumber,0,Green);
PlaySound("Alert.wav");
Time0=Time[0];
}
}
///////////////////////////////////////////////////////////////////////////////////////////
///////////////1- put the sell stop//////////////
if (MySellPendingOrdersTotal(MagicNumber)==0 && Time0!=Time[0]&& USE_SELLSTOP==TRUE ){
if((TimeCurrent()-LastClosedOrderTime())/60/60>=9999)
{
if(StopLoss==0||HideSL){SL=0;}else{SL=Bid+StopLoss*point;}
if(TakeProfit==0||HideTP){TP=0;}else{TP=Bid-TakeProfit*point;}
if(UseRecTP)TP=(Bid-TP_R);
if(UseRecSL)SL=(Bid+SL_R);
OrderSend(Symbol(),OP_SELLSTOP,Lots1,sell,3,SL,TP,"first" ,MagicNumber,0,Green);
PlaySound("Alert.wav");
Time0=Time[0];
}
}
كود PHP:if((TimeCurrent()-LastClosedOrderTime())/60/60>=99999)
كود PHP:Time0!=Time[0]
رجاء الإطلاع أخي أسامه ومراجعة باقي الخطوات إذا كان هناك خطأ ..
و بارك الله فيك .
الإكســــــــــــــبيرت
المواضيع المتشابهه
-
موضوع مخصص للاكسبيرتات اللتي يستخدمها الاعضاء على الحقيقي,,عندك اكسبيرت ممتاز ضعه هنا
By محمد معمو in forum برمجة المؤشرات واكسبرتات التداول - Experts Advisor EAمشاركات: 11آخر مشاركة: 15-12-2023, 02:03 PM -
عااااااااااااجل ( موضوع مخصص للفرص الفورية)!!!
By عاشق الذبذبـة in forum توقعات وتوصيات سوق العملاتمشاركات: 280آخر مشاركة: 27-08-2009, 10:30 PM