النتائج 4,141 إلى 4,155 من 10335
الموضوع: موضوع مخصص للأسئلة البرمجية
- 11-07-2013, 05:08 AM #4141
- 11-07-2013, 09:24 PM #4142
نعم كلامك صحيح لكن هنا نتكلم عن اكسبيرت الأوامر المعلقة للأستاذ مستر دولار بداخله يوجد 2 ماجيك نمبر متعلقة بحسابات رياضية للأوامر المعلقة ولا بد من اختلافهما لا يمكن وضع الرقم 0 وقمت بتجربتها وحصل تفعيل أوامر معلقة كثيرة جدا في نفس السعر ...
ومنه الحل هو الكومنت كما ذكر الأستاذ مستر دولار
لكن كيف ؟
هل بوضع شرط آخر للكومنت ضمن الاكسبيرت وهذا ربما يحتاج تعديل كل الكود
أم عند وضع الصفقة يدويا أكتب فقط بكومنت الأوردر نفس الكومنت الموجود بصفقات الاكسبيرت (كما شرحت بمشاركتي السابقة) ؟؟
جزاك الله خيرا أستاذ جميل
- 11-07-2013, 11:35 PM #4143
- 12-07-2013, 12:29 AM #4144
- 12-07-2013, 05:26 AM #4145
رد:موضوع مخصص للأسئلة البرمجية
بالنسبه لشرط وضع الأوامر في توقيت معين
مثال
كود PHP:static int timeH;
if(Hour()==0&&timeH!=Time[0]))
{
timeH=Time[0];
}
طبعا الشروط سوف تقوم بوضعها مع شروط فتح الأوامر المعلقه
وسوف تلغي الشرط القديم في هذه الحاله
كود PHP:Time0!=iTime(Symbol(),1440,0)
فأولا سوف تقوم بعمل دالة لمعرفة الصفقات المفتوحه الخاسره حتى يتم إغلاقها
كود PHP:void CloseLostOrders()
{
for(int i=0;i<OrdersTotal();i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderProfit()<0)
{
if(OrderType()==OP_BUY)OrderClose(OrderTicket(),OrderLots(),Bid,3);
if(OrderType()==OP_SELL)OrderClose(OrderTicket(),OrderLots(),Ask,3);
}
}
}
- 12-07-2013, 05:30 AM #4146
رد:موضوع مخصص للأسئلة البرمجية
نعم يمكنك إستخدامه بهذا الشكل لكن كما أخبرتك يجب أن تحذف شروط الماجيك نمبر وتضيف شرط الكومنت أو أن تلغي جميع الشروط إذا أردت الكومنت والماجيك نمبر وفي هذه الحالة سيتعامل مع كل الصفقات
لكن طبعا كما لاحظت أن الإكسبرت يقوم بحساب الصفقات المفتوحه كل نوع عن طريق الماجيك نمبر لذلك يجب أن تراعي هذه النقطه إما أن يحسب عدد الصفقات عن طريق الكومنت أو أن تجعل لصفقات الشراء كومنت معين وصفقات البيع كومنت آخر
وعند فتح الصفقه يدويا تراعي أيضا صفقات الشراء تضع لها كومنت صفقة الشراء وصفقات البيع تضع لها كومنت صفقة البيع
- 12-07-2013, 01:56 PM #4147
عشت أخى الحبيب وبارك الله فيك وتقبل صيامك وأعمالك ليا سؤال كمان معلش أخى الحبيب
الإكسيبرت لو وضعته على أكثر من عملة بيشتغل على عملة واحدة وباقى العملات لاء يعنى مثلا إمبارح كان واضع اوردرات على اليورو والباقى لاء انهردة لقيته شغال على الين والباقى لاء
معلش أخى حبيبى ممكن كود يخليه يضع اوردرات للعملات الموضوع عليها ولا يكتفى بعملة واحدة
وجزاك الله خيرا
- 12-07-2013, 03:58 PM #4148
رد:موضوع مخصص للأسئلة البرمجية
كود PHP://+------------------------------------------------------------------+
//| Doda-Donchian v2 mod.mq4 |
//| Copyright © 2010, Gopal Krishan Doda |
//| mod by Iwan Sulistiawan |
//| http://www.DodaCharts.com |
//+------------------------------------------------------------------+
#property indicator_chart_window
#property indicator_buffers 5
#property indicator_color1 OrangeRed
#property indicator_color2 OrangeRed
#property indicator_color3 DarkViolet
#property indicator_color4 CLR_NONE
#property indicator_color5 CLR_NONE
#property indicator_width1 3
#property indicator_width2 3
#property indicator_width3 2
#property indicator_width4 CLR_NONE
#property indicator_width5 CLR_NONE
extern color pivotColor = Blue;
extern color pivotlevelColor = Blue;
extern int ChannelPeriod = 24;
extern int EMAPeriod = 120;
extern int StartEMAShift = 6;
extern int EndEMAShift = 0;
extern double AngleTreshold = 0.32;
string note1="Change font colors automatically? True = Yes";
extern bool Bid_Ask_Colors=True;
string note2="Default Price Font Color";
extern color FontColorPrice=Black;
string note3="Font Size";
extern int FontSizePrice=26;
string note4="Font Type";
string FontType="Rockwell";
extern int Corner=1;
extern color CandleTimeColor = Blue;
int XDistance=1;
int YDistance=5;
double Old_Price;
int signalcondition = 0;
int CrossTime;
double CrossPrice;
string dbl2str;
string str_concat;
double UpperLine[];
double LowerLine[];
double MidLine[];
double BuyBuffer[];
double SellBuffer[];
double s1[];
bool BuySignal = FALSE;
bool SellSignal = FALSE;
int init() {
SetIndexStyle(0, DRAW_LINE);
SetIndexBuffer(0, UpperLine);
SetIndexLabel(0, "UpperLine");
SetIndexStyle(1, DRAW_LINE);
SetIndexBuffer(1, LowerLine);
SetIndexLabel(1, "LowerLine");
SetIndexStyle(2, DRAW_LINE);
SetIndexBuffer(2, MidLine);
SetIndexLabel(2, "MidLine");
SetIndexStyle(3, DRAW_ARROW, EMPTY);
SetIndexArrow(3, SYMBOL_ARROWUP);
SetIndexBuffer(3, BuyBuffer);
SetIndexLabel(3, "Buy");
SetIndexStyle(4, DRAW_ARROW, EMPTY);
SetIndexArrow(4, SYMBOL_ARROWDOWN);
SetIndexBuffer(4, SellBuffer);
SetIndexLabel(4, "Sell");
ObjectCreate("myPriceLabel", OBJ_LABEL, 0, 0, 0);
ObjectCreate("myPrice", OBJ_TEXT, 0, CrossTime, CrossPrice);
ObjectCreate("myPips", OBJ_LABEL, 0, 0, 0);
IndicatorShortName("Doda-Donchian v2(" + ChannelPeriod + ")");
SetIndexDrawBegin(0, ChannelPeriod);
SetIndexDrawBegin(1, ChannelPeriod);
ObjectCreate("mysl", OBJ_LABEL, 0, 0, 0);
ObjectCreate("support1", OBJ_LABEL, 0, 0, 0);
ObjectCreate("support2", OBJ_LABEL, 0, 0, 0);
ObjectCreate("support3", OBJ_LABEL, 0, 0, 0);
ObjectCreate("resistance1", OBJ_LABEL, 0, 0, 0);
ObjectCreate("resistance2", OBJ_LABEL, 0, 0, 0);
ObjectCreate("resistance3", OBJ_LABEL, 0, 0, 0);
return (0);
}
int deinit() {
ObjectDelete("mysl");
ObjectDelete("myPips");
ObjectDelete("myPriceLabel");
ObjectDelete("myHline2");
ObjectDelete("myVline2");
ObjectDelete("S1");
ObjectDelete("S2");
ObjectDelete("S3");
ObjectDelete("R1");
ObjectDelete("R2");
ObjectDelete("R3");
ObjectDelete("pivot");
ObjectDelete("Support 1");
ObjectDelete("Support 2");
ObjectDelete("Support 3");
ObjectDelete("pivot level");
ObjectDelete("Resistance 1");
ObjectDelete("Resistance 2");
ObjectDelete("Resistance 3");
ObjectDelete("support1");
ObjectDelete("support2");
ObjectDelete("support3");
ObjectDelete("resistance1");
ObjectDelete("resistance2");
ObjectDelete("resistance3");
ObjectDelete("Market_Price_Label");
ObjectDelete("time");
return (0);
}
int start() {
double barvalue[1][6];
double close;
double high;
double low;
int start;
double fEndMA;
double fStartMA;
double fAngle;
int digits;
double k;
int m,s,l;
ArrayCopyRates(barvalue, Symbol(), PERIOD_D1);
if (DayOfWeek() == 1) {
if (TimeDayOfWeek(iTime(Symbol(), PERIOD_D1, 1)) == 5) {
close = barvalue[1][4];
high = barvalue[1][3];
low = barvalue[1][2];
} else {
for (int j = 5; j >= 0; j--) {
if (TimeDayOfWeek(iTime(Symbol(), PERIOD_D1, j)) == 5) {
close = barvalue[j][4];
high = barvalue[j][3];
low = barvalue[j][2];
}
}
}
} else {
close = barvalue[1][4];
high = barvalue[1][3];
low = barvalue[1][2];
}
double rangehl = high - low;
double pivot = (high + low + close) / 3.0;
double R3 = pivot + 1.0 * rangehl;
double R2 = pivot + 0.618 * rangehl;
double R1 = pivot + rangehl / 2.0;
double S1 = pivot - rangehl / 2.0;
double S2 = pivot - 0.618 * rangehl;
double S3 = pivot - 1.0 * rangehl;
drawLine(R3, "R3", DarkGreen, 0);
drawLabel("Resistance 3", R3, DarkGreen);
drawLine(R2, "R2", ForestGreen, 0);
drawLabel("Resistance 2", R2, ForestGreen);
drawLine(R1, "R1", Green, 0);
drawLabel("Resistance 1", R1, Green);
drawLine(pivot, "pivot", pivotColor, 0);
drawLabel("Pivot level", pivot, pivotlevelColor);
drawLine(S1, "S1", Red, 0);
drawLabel("Support 1", S1, Red);
drawLine(S2, "S2", Crimson, 0);
drawLabel("Support 2", S2, Crimson);
drawLine(S3, "S3", Maroon, 0);
drawLabel("Support 3", S3, Maroon);
int counted_indicators = IndicatorCounted();
if (Bars <= ChannelPeriod) return (0);
if (counted_indicators >= ChannelPeriod) start = Bars - counted_indicators - 1;
else start = Bars - ChannelPeriod - 1;
BuyBuffer[0] = 0;
SellBuffer[0] = 0;
for (int i = start; i >= 0; i--) {
UpperLine[i] = High[iHighest(NULL, 0, MODE_HIGH, ChannelPeriod, i)];
LowerLine[i] = Low[iLowest(NULL, 0, MODE_LOW, ChannelPeriod, i)];
MidLine[i] = (UpperLine[i] + LowerLine[i]) / 2.0;
fEndMA = iMA(NULL, 0, EMAPeriod, 0, MODE_EMA, PRICE_MEDIAN, i + EndEMAShift);
fStartMA = iMA(NULL, 0, EMAPeriod, 0, MODE_EMA, PRICE_MEDIAN, i + StartEMAShift);
fAngle = 10000.0 * (fEndMA - fStartMA) / (StartEMAShift - EndEMAShift);
if (UpperLine[i + 1] < High[i] && fAngle > AngleTreshold) BuyBuffer[i] = High[i];
if (LowerLine[i + 1] > Low[i] && fAngle < (-AngleTreshold)) SellBuffer[i] = Low[i];
if (Close[i] > MidLine[i] && BuySignal == FALSE) {
signalcondition = TRUE;
CrossPrice = Close[i];
CrossTime = Time[i];
BuySignal = TRUE;
SellSignal = FALSE;
}
if (Close[i] < MidLine[i] && SellSignal == FALSE) {
signalcondition = FALSE;
CrossPrice = Close[i];
CrossTime = Time[i];
BuySignal = FALSE;
SellSignal = TRUE;
}
}
if (signalcondition == TRUE) {
ObjectDelete("myHline2");
ObjectDelete("myVline2");
ObjectCreate("myHline2", OBJ_HLINE, 0, CrossTime, CrossPrice, 0, 0);
ObjectCreate("myVline2", OBJ_VLINE, 0, CrossTime, CrossPrice, 0, 0);
ObjectSet("myHline2", OBJPROP_COLOR, LimeGreen);
ObjectSet("myVline2", OBJPROP_COLOR, LimeGreen);
ObjectSetText("myPrice", StringConcatenate("", CrossPrice), 18, "Arial", LimeGreen);
ObjectSetText("myPriceLabel", StringConcatenate("Buy Price @: ", DoubleToStr(CrossPrice, Digits)), 10, "Arial", LimeGreen);
ObjectSet("myPriceLabel", OBJPROP_XDISTANCE, 2);
ObjectSet("myPriceLabel", OBJPROP_YDISTANCE, 40);
ObjectSet("myPriceLabel", OBJPROP_CORNER, Corner);
if (Symbol() == "AUDNZD" || Symbol() == "GBPAUD" || Symbol() == "EURAUD" || Symbol() == "EURCAD") ObjectSetText("myPips", StringConcatenate("Profit in Pips: ", NormalizeDouble(Close[0] - CrossPrice, Digits) / Point), 10, "Arial", LimeGreen);
else ObjectSetText("myPips", StringConcatenate("Profit in Pips: ", NormalizeDouble(Close[0] - CrossPrice, Digits) / Point), 10, "Arial", LimeGreen);
ObjectSet("myPips", OBJPROP_XDISTANCE, 2);
ObjectSet("myPips", OBJPROP_YDISTANCE, 56);
ObjectSet("myPips", OBJPROP_CORNER, Corner);
dbl2str = DoubleToStr(CrossPrice, Digits);
str_concat = StringConcatenate("Profit in Pips: ", NormalizeDouble(Close[0] - CrossPrice, Digits) / Point / 10.0);
}
if (signalcondition == FALSE) {
ObjectDelete("myHline2");
ObjectDelete("myVline2");
ObjectCreate("myHline2", OBJ_HLINE, 0, CrossTime, CrossPrice, 0, 0);
ObjectCreate("myVline2", OBJ_VLINE, 0, CrossTime, CrossPrice, 0, 0);
ObjectSet("myHline2", OBJPROP_COLOR, Red);
ObjectSet("myVline2", OBJPROP_COLOR, Red);
ObjectSetText("myPrice", StringConcatenate("", CrossPrice), 18, "Arial", Red);
ObjectSetText("myPriceLabel", StringConcatenate("Sell Price @: ", DoubleToStr(CrossPrice, Digits)), 10, "Arial", Red);
ObjectSet("myPriceLabel", OBJPROP_XDISTANCE, 2);
ObjectSet("myPriceLabel", OBJPROP_YDISTANCE, 40);
ObjectSet("myPriceLabel", OBJPROP_CORNER, Corner);
if (Symbol() == "AUDNZD" || Symbol() == "GBPAUD" || Symbol() == "EURAUD" || Symbol() == "EURCAD") ObjectSetText("myPips", StringConcatenate("Profit in Pips: ", NormalizeDouble(CrossPrice - Close[0], Digits) / Point), 10, "Arial", Red);
else ObjectSetText("myPips", StringConcatenate("Profit in Pips: ", NormalizeDouble(CrossPrice - Close[0], Digits) / Point), 10, "Arial", Red);
ObjectSet("myPips", OBJPROP_XDISTANCE, 2);
ObjectSet("myPips", OBJPROP_YDISTANCE, 56);
ObjectSet("myPips", OBJPROP_CORNER, Corner);
dbl2str = DoubleToStr(CrossPrice, Digits);
str_concat = StringConcatenate("Profit in Pips: ", NormalizeDouble(CrossPrice - Close[0], Digits) / Point / 10.0);
}
ObjectSetText("mysl", "Stop Loss: " + DoubleToStr(MidLine[0], Digits), 10, "Arial", MediumBlue);
ObjectSet("mysl", OBJPROP_XDISTANCE, 2);
ObjectSet("mysl", OBJPROP_YDISTANCE, 70);
ObjectSet("mysl", OBJPROP_CORNER, Corner);
ObjectSetText("support1", "Support1: " + DoubleToStr(S1, Digits), 10, "Arial", Red);
ObjectSet("support1", OBJPROP_XDISTANCE, 2);
ObjectSet("support1", OBJPROP_YDISTANCE, 130);
ObjectSet("support1", OBJPROP_CORNER, Corner);
ObjectSetText("support2", "Support2: " + DoubleToStr(S2, Digits), 10, "Arial", Red);
ObjectSet("support2", OBJPROP_XDISTANCE, 2);
ObjectSet("support2", OBJPROP_YDISTANCE, 145);
ObjectSet("support2", OBJPROP_CORNER, Corner);
ObjectSetText("support3", "Support3: " + DoubleToStr(S3, Digits), 10, "Arial", Red);
ObjectSet("support3", OBJPROP_XDISTANCE, 2);
ObjectSet("support3", OBJPROP_YDISTANCE, 160);
ObjectSet("support3", OBJPROP_CORNER, Corner);
ObjectSetText("resistance1", "Resistance1: " + DoubleToStr(R1, Digits), 10, "Arial", ForestGreen);
ObjectSet("resistance1", OBJPROP_XDISTANCE, 2);
ObjectSet("resistance1", OBJPROP_YDISTANCE, 85);
ObjectSet("resistance1", OBJPROP_CORNER, Corner);
ObjectSetText("resistance2", "Resistance2: " + DoubleToStr(R2, Digits), 10, "Arial", ForestGreen);
ObjectSet("resistance2", OBJPROP_XDISTANCE, 2);
ObjectSet("resistance2", OBJPROP_YDISTANCE, 100);
ObjectSet("resistance2", OBJPROP_CORNER, Corner);
ObjectSetText("resistance3", "Resistance3: " + DoubleToStr(R3, Digits), 10, "Arial", ForestGreen);
ObjectSet("resistance3", OBJPROP_XDISTANCE, 2);
ObjectSet("resistance3", OBJPROP_YDISTANCE, 115);
ObjectSet("resistance3", OBJPROP_CORNER, Corner);
Comment("Doda-Donchian v2 mod by isulistiawan");
//---Market Price start
if (Bid_Ask_Colors==True)
{
if (Bid > Old_Price) FontColorPrice=Lime;
if (Bid < Old_Price) FontColorPrice=Red;
Old_Price=Bid;
}
string sub=StringSubstr(Symbol(), 3, 3);
if(sub == "JPY") digits = 2;
else digits = 4;
string Market_Price=DoubleToStr(Bid, digits);
ObjectCreate("Market_Price_Label", OBJ_LABEL, 0, 0, 0);
ObjectSetText("Market_Price_Label", Market_Price, FontSizePrice, FontType, FontColorPrice);
ObjectSet("Market_Price_Label", OBJPROP_CORNER, Corner);
ObjectSet("Market_Price_Label", OBJPROP_XDISTANCE, XDistance+15);
ObjectSet("Market_Price_Label", OBJPROP_YDISTANCE, YDistance);
//--Candle Time
m=Time[0]+Period()*60-CurTime();
k=m/60.0;
s=m%60;
m=(m-m%60)/60;
// Comment( m + " minutes " + s + " seconds left to bar end");
ObjectDelete("time");
if(ObjectFind("time") != 0)
{
ObjectCreate("time", OBJ_TEXT, 0, Time[0], Close[0]+ 0.0005);
ObjectSetText("time", " "+m+":"+s, 10, "Rockwell", CandleTimeColor);
}
else
{
ObjectMove("time", 0, Time[0], Close[0]+0.0005);
}
return (0);
}
void drawLabel(string linename, double a_price_8, color colorline) {
if (ObjectFind(linename) != 0) {
ObjectCreate(linename, OBJ_TEXT, 0, Time[10], a_price_8);
ObjectSetText(linename, linename, 8, "Arial", CLR_NONE);
ObjectSet(linename, OBJPROP_COLOR, colorline);
return;
}
ObjectMove(linename, 0, Time[10], a_price_8);
}
void drawLine(double priceline, string drawline, color colorline, int ai_20) {
if (ObjectFind(drawline) != 0) {
ObjectCreate(drawline, OBJ_HLINE, 0, Time[0], priceline, Time[0], priceline);
if (ai_20 == 1) ObjectSet(drawline, OBJPROP_STYLE, STYLE_SOLID);
else ObjectSet(drawline, OBJPROP_STYLE, STYLE_DOT);
ObjectSet(drawline, OBJPROP_COLOR, colorline);
ObjectSet(drawline, OBJPROP_WIDTH, 1);
return;
}
ObjectDelete(drawline);
ObjectCreate(drawline, OBJ_HLINE, 0, Time[0], priceline, Time[0], priceline);
if (ai_20 == 1) ObjectSet(drawline, OBJPROP_STYLE, STYLE_SOLID);
else ObjectSet(drawline, OBJPROP_STYLE, STYLE_DOT);
ObjectSet(drawline, OBJPROP_COLOR, colorline);
ObjectSet(drawline, OBJPROP_WIDTH, 1);
}
أنا عارف إن طلباتى كتير بس معلش سامحنى أنا بصراحة ماصدقت لقيت حضرتك رديت على طلبى
- 12-07-2013, 10:07 PM #4149
رد:موضوع مخصص للأسئلة البرمجية
بارك الله فيك أستاذي الحبيب
طيب قمت بحذف كل شروط الماجيك نمبر وجعلت لصفقات الشراء كومنت "buy" وصفقات البيع كومنت "sell"
لا يوجد أخطاء بالكمبايل لكن عند التجربة بالباكتيست لم يستطع الاكسبيرت وضع الأوامر المعلقة من جديد مكان المغلقة هذا معناه وجود خطأ حسابي بشروط الكومنت! أعتقد انه ينقصه كود ما بالدالة int init
فأرجو التصحيح أستاذي العزيز ضمن الاكسبيرت
وسؤال آخر فضلا أستاذي
في حالة عمل الاكسبيرت على سلة عملات فلن يحدث خلط في الأوامر رغم تطابق الكومنت لأنه يوجد شرطكود PHP:OrderSymbol()==Symbol()
بانتظارك وآسف على كثرة الاستفسارات
الاكسبيرت بالمرفقات
آخر تعديل بواسطة kira-h ، 12-07-2013 الساعة 10:14 PM
- 13-07-2013, 11:42 AM #4150
رد:موضوع مخصص للأسئلة البرمجية
شكرا لجهود الاخوة في هذا الموضوع
بالنسبة للميتاتريدر في قسم فحص الاكسبريت
يوجد :
أمر " حدود الاختبار " ما هي ميزة هذا الزر وكيف يمكن الاستفادة منه ؟؟
وشكرا جزيلا
- 14-07-2013, 08:01 PM #4151
رد:موضوع مخصص للأسئلة البرمجية
الإكسبرت المفروض أنه فعلا سيقوم بالتعامل مع كل عمله لوحدها وسيفتح صفقات على جميع العملات لكن السبب غالبا بما أن الصفقات تفتح جميعها في وقت واحد فقد تحدث مشكلة عندما يقول إكسبرت على كل عمله بفتح الصفقه فعلى العمله الأخرى عندما يريد فتح صفقة ستحدث مشكلة أن السيرفر مشغول وبالتالي لن يفتح صفقه على الزوج الآخر
وغالبا سوف تجد الخطأ 146 يعني أن السيرفر مشغول
لحل هذه المشكلة يمكنك أن تضع شرط قبل فتح الصفقه
كود PHP:while(IsTradeContextBusy())Sleep(1000);
- 15-07-2013, 04:35 AM #4152
رد:موضوع مخصص للأسئلة البرمجية
مرحبا أيها الاصدقاء . أحتاج تعديل لهدا السكريبت منفضلكم.
مهمت السكربت 1 : عدم إقفال أي صفقة رابحة من " 0 إلى 40 نقطة"
مهمت السكربت 2 : عدم إقفال أي صفقة خاسرة من " 0 إلى 39 نقطة"
وشكرا على المساعدة مسبقا .
كود PHP://+------------------------------------------------------------------+
//| This MQL is generated by Expert Advisor Builder |
//| http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/ |
//| |
//| In no event will author be liable for any damages whatsoever. |
//| Use at your own risk. |
//| |
//+------------------- DO NOT REMOVE THIS HEADER --------------------+
#define SIGNAL_NONE 0
#define SIGNAL_BUY 1
#define SIGNAL_SELL 2
#define SIGNAL_CLOSEBUY 3
#define SIGNAL_CLOSESELL 4
#property copyright "Expert Advisor Builder"
#property link "http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/"
extern int MagicNumber = 0;
extern bool SignalMail = False;
extern bool EachTickMode = True;
extern double Lots = 1.0;
extern int Slippage = 3;
extern bool UseStopLoss = True;
extern int StopLoss = 40;
extern bool UseTakeProfit = False;
extern int TakeProfit = 60;
extern bool UseTrailingStop = False;
extern int TrailingStop = 30;
int BarCount;
int Current;
bool TickCheck = False;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init() {
BarCount = Bars;
if (EachTickMode) Current = 0; else Current = 1;
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit() {
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start() {
int Order = SIGNAL_NONE;
int Total, Ticket;
double StopLossLevel, TakeProfitLevel;
if (EachTickMode && Bars != BarCount) TickCheck = False;
Total = OrdersTotal();
Order = SIGNAL_NONE;
//+------------------------------------------------------------------+
//| Variable Begin |
//+------------------------------------------------------------------+
double Buy1_1 = iMA(NULL, 0, 5, 0, MODE_SMA, PRICE_CLOSE, Current + 1);
double Buy1_2 = iMA(NULL, 0, 5, 0, MODE_SMA, PRICE_OPEN, Current + 1);
double Buy2_1 = iMA(NULL, 0, 5, 0, MODE_SMA, PRICE_CLOSE, Current + 2);
double Buy2_2 = iMA(NULL, 0, 5, 0, MODE_SMA, PRICE_OPEN, Current + 2);
double Sell1_1 = iMA(NULL, 0, 5, 0, MODE_SMA, PRICE_CLOSE, Current + 1);
double Sell1_2 = iMA(NULL, 0, 5, 0, MODE_SMA, PRICE_OPEN, Current + 1);
double Sell2_1 = iMA(NULL, 0, 5, 0, MODE_SMA, PRICE_CLOSE, Current + 2);
double Sell2_2 = iMA(NULL, 0, 5, 0, MODE_SMA, PRICE_OPEN, Current + 2);
double CloseBuy1_1 = iMA(NULL, 0, 5, 0, MODE_SMA, PRICE_CLOSE, Current + 1);
double CloseBuy1_2 = iMA(NULL, 0, 5, 0, MODE_SMA, PRICE_OPEN, Current + 1);
double CloseSell1_1 = iMA(NULL, 0, 5, 0, MODE_SMA, PRICE_CLOSE, Current + 1);
double CloseSell1_2 = iMA(NULL, 0, 5, 0, MODE_SMA, PRICE_OPEN, Current + 1);
//+------------------------------------------------------------------+
//| Variable End |
//+------------------------------------------------------------------+
//Check position
bool IsTrade = False;
for (int i = 0; i < Total; i ++) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) {
IsTrade = True;
if(OrderType() == OP_BUY) {
//Close
//+------------------------------------------------------------------+
//| Signal Begin(Exit Buy) |
//+------------------------------------------------------------------+
if (CloseBuy1_1 < CloseBuy1_2) Order = SIGNAL_CLOSEBUY;
//+------------------------------------------------------------------+
//| Signal End(Exit Buy) |
//+------------------------------------------------------------------+
if (Order == SIGNAL_CLOSEBUY&&(OrderProfit()<0||OrderProfit()>=TakeProfit)&&(
(EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");
if (!EachTickMode) BarCount = Bars;
IsTrade = False;
continue;
}
//Trailing stop
if(UseTrailingStop && TrailingStop > 0) {
if(Bid - OrderOpenPrice() > Point * TrailingStop) {
if(OrderStopLoss() < Bid - Point * TrailingStop) {
OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
} else {
//Close
//+------------------------------------------------------------------+
//| Signal Begin(Exit Sell) |
//+------------------------------------------------------------------+
if (CloseSell1_1 > CloseSell1_2) Order = SIGNAL_CLOSESELL;
//+------------------------------------------------------------------+
//| Signal End(Exit Sell) |
//+------------------------------------------------------------------+
if (Order == SIGNAL_CLOSESELL&&(OrderProfit()<0||OrderProfit()>=TakeProfit)&&
((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell");
if (!EachTickMode) BarCount = Bars;
IsTrade = False;
continue;
}
//Trailing stop
if(UseTrailingStop && TrailingStop > 0) {
if((OrderOpenPrice() - Ask) > (Point * TrailingStop)) {
if((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) {
OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
}
}
}
//+------------------------------------------------------------------+
//| Signal Begin(Entry) |
//+------------------------------------------------------------------+
if (Buy1_1 > Buy1_2 && Buy2_1 <= Buy2_2) Order = SIGNAL_BUY;
if (Sell1_1 < Sell1_2 && Sell2_1 >= Sell2_2) Order = SIGNAL_SELL;
//+------------------------------------------------------------------+
//| Signal End |
//+------------------------------------------------------------------+
//Buy
if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
if(!IsTrade) {
//Check free margin
if (AccountFreeMargin() < (1000 * Lots)) {
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;
if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;
Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);
if(Ticket > 0) {
if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
Print("BUY order opened : ", OrderOpenPrice());
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");
} else {
Print("Error opening BUY order : ", GetLastError());
}
}
if (EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
return(0);
}
}
//Sell
if (Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
if(!IsTrade) {
//Check free margin
if (AccountFreeMargin() < (1000 * Lots)) {
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
if (UseStopLoss) StopLossLevel = Bid + StopLoss * Point; else StopLossLevel = 0.0;
if (UseTakeProfit) TakeProfitLevel = Bid - TakeProfit * Point; else TakeProfitLevel = 0.0;
Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);
if(Ticket > 0) {
if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
Print("SELL order opened : ", OrderOpenPrice());
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell");
} else {
Print("Error opening SELL order : ", GetLastError());
}
}
if (EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
return(0);
}
}
if (!EachTickMode) BarCount = Bars;
return(0);
}
//+------------------------------------------------------------------+
- 15-07-2013, 05:15 AM #4153
- 15-07-2013, 03:22 PM #4154
السلام عليكم ورحمة الله.
اريد كود المناقصات
يعني اذا كان العقد الاول 8 يكون العقد الثاني 7 والثالث 6 والرابع 5وهكذا ؟
او
يعني اذا كان العقد الاول 8 يكون العقد الثاني 4 والثالث 2 والرابع 1وهكذا؟آخر تعديل بواسطة daod ، 15-07-2013 الساعة 03:24 PM
- 15-07-2013, 04:10 PM #4155
رد:موضوع مخصص للأسئلة البرمجية
السلام عليكم ورحمة الله وبركاته
تحياتي أستاذ مستر دولار
كنت أنتظر الرد على المشاركة رقم 4149 لكن الان لنتركها فيما بعد لأنها مسألة ثانوية فقط
الان لدي مشكلة أعظم!!!
كنت أظن أن دالة الاغلاق كلوزباي لمستويين أنها تفي بالغرض لكن الظاهر العكس لكن الخطأ مني حيث لم أشرح بالتفصيل ما أريد
هذه الدالة للتذكير قمنا باضفتها باكسبيرت الأوامر المعلقة النسخة 4.6
والتي قمت بتعديلها بحدف Break حيث لا يستطيع الاكسبيرت إغلاق كلوزباي للهيدج الموالي
لكن النتيجة أنها تعمل عكس ما أريد
كود:void CheckPipsB() { for(int i=0;i<OrdersTotal();i++) { OrderSelect(i,SELECT_BY_POS,MODE_TRADES); double openprice_B=OrderOpenPrice();int ticket_B=OrderTicket(); if(OrderSymbol()==Symbol()) { if(OrderType()==OP_BUY) { double ProfitPips_B=(Bid-openprice_B)/Point; for(int j=0;j<OrdersTotal();j++) { OrderSelect(j,SELECT_BY_POS,MODE_TRADES); double openprice_S=OrderOpenPrice();int ticket_S=OrderTicket(); if(OrderSymbol()==Symbol()) { if(OrderType()==OP_SELL) { double ProfitPips_S=(openprice_S-Ask)/Point; if(ProfitPips_B>=PipProfit) { if(ProfitPips_B+ProfitPips_S>TotalProfit) { OrderCloseBy(ticket_B,ticket_S); } } } } } } } } } void CheckPipsS() { for(int i=0;i<OrdersTotal();i++) { OrderSelect(i,SELECT_BY_POS,MODE_TRADES); double openprice_S=OrderOpenPrice();int ticket_S=OrderTicket(); if(OrderSymbol()==Symbol()) { if(OrderType()==OP_SELL) { double ProfitPips_S=(openprice_S-Ask)/Point; for(int j=0;j<OrdersTotal();j++) { OrderSelect(j,SELECT_BY_POS,MODE_TRADES); double openprice_B=OrderOpenPrice();int ticket_B=OrderTicket(); if(OrderSymbol()==Symbol()) { if(OrderType()==OP_BUY) { double ProfitPips_B=(Bid-openprice_B)/Point; if(ProfitPips_S>=PipProfit) { if(ProfitPips_S+ProfitPips_B>TotalProfit) { OrderCloseBy(ticket_S,ticket_B); } } } } } } } } }
سابقا كنا عملنا دالة تحقق الاغلاق بعد تحقق ربح إجمالي للهيدج فقط
ما احتاجة بالصورة بالمرفقات مع الشرح :
لاحظ معي فضلا أستاذي
عند حدوث الحركة من a إلى b يتم الحصول على هيدج رابح (بيع2+شراء3)
الدالة التي قمنا باستخدامها تقوم بالاغلاق منباشرة بعد الحصول على هذا الربح
ما أريده هو ان لا يتم هذا الاغلاق إلا عند حدوث الحركة من b إلى c بمعنى بمجرد عودة السعر إلى مستوى الشراء2 يتم إغلاق كلوزباي للهيدج (بيع2+شراء3)
لاحظ معي الحركة من d إلى e سيتم جني ربح الهيدج (شراء2+بيع1) عند مستوى البيع2
عملت محاولة قد تكون هي الحل ونجحت بالفعل بالباكتيست لكنني أريد ضمان تأكيد المقارنة بجعل البروفيت والخسارة محاصرين بين قيمتين
مثلا ربح الشراء بين 100 نقطة و 120 نقطة وخسارة البيع بين 40- و 30- فكيف يمكن ذلك؟
الدالة المعدلة وأرجو التصحيح
كود PHP:void CheckPipsS()
{
for(int i=0;i<OrdersTotal();i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
double openprice_S=OrderOpenPrice();int ticket_S=OrderTicket();
if(OrderSymbol()==Symbol())
{
if(OrderType()==OP_SELL)
{
double ProfitPips_S=(openprice_S-Ask)/Point;
for(int j=0;j<OrdersTotal();j++)
{
OrderSelect(j,SELECT_BY_POS,MODE_TRADES);
double openprice_B=OrderOpenPrice();int ticket_B=OrderTicket();
if(OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY)
{
double ProfitPips_B=(Bid-openprice_B)/Point;
if((ProfitPips_S<=PipLoss)&&(ProfitPips_B>=PipProfit))
{
if(ProfitPips_S+ProfitPips_B>TotalProfit)
{
OrderCloseBy(ticket_S,ticket_B);
}
}
}
}
}
}
}
}
}
آخر تعديل بواسطة kira-h ، 15-07-2013 الساعة 04:36 PM
المواضيع المتشابهه
-
موضوع مخصص للاكسبيرتات اللتي يستخدمها الاعضاء على الحقيقي,,عندك اكسبيرت ممتاز ضعه هنا
By محمد معمو in forum برمجة المؤشرات واكسبرتات التداول - Experts Advisor EAمشاركات: 11آخر مشاركة: 15-12-2023, 02:03 PM -
عااااااااااااجل ( موضوع مخصص للفرص الفورية)!!!
By عاشق الذبذبـة in forum توقعات وتوصيات سوق العملاتمشاركات: 280آخر مشاركة: 27-08-2009, 10:30 PM