تفضل هذا هو طلبك ولكن يجب ان تضع مؤشر cci فى مجلد المؤشرات لكى يعمل الاكسبيرت بطريقة صحيحة
Printable View
طيب أفضل حل الآن قم بإضافة كود المؤشر إلى الإكسبرت مباشرة
مثال
ثم سيكون إستدعاء خطوط من المصفوفهكود PHP:double Price;
if (!Set_Price_Manual)
{
if (Apply=="o" || Apply=="O") Price=Open[iBarBegin];
else if (Apply=="c" || Apply=="C") Price=Close[iBarBegin];
else if (Apply=="h" || Apply=="H") Price=High[iBarBegin];
else if (Apply=="l" || Apply=="L") Price=Low[iBarBegin];
else Price=(Close[iBarBegin] + Low[iBarBegin] + High[iBarBegin])/3;
}
else if (Set_Price_Manual) Price=Start_Price;
double NLine=Price;
double HigherLines[];
double LowerLines[];
ArrayResize(HigherLines,no_of_Higher_Lines);
ArrayResize(no_of_Lower_Lines,LowerLines);
for (int i=0;i<no_of_Higher_Lines;i++)
{
HigherLines[i]=Price+(i*Pips*Point);
}
for (int j=0;j<no_of_Lower_Lines;j++)
{
LowerLines[i]=Price-(j*Pips*Point);
}
بالنسبه لدالة حساب الربح فهي صحيحه نعم
وعليكم السلام ورحمة الله وبركاته
تختلف حسب المبرمج وطريقة كتابته للكود فلا يوجد طريقة ثابته
الأسهل بالنسبه لك فما أنك تريد أن تجعل الهدف 0.1 نقطه فيمكنك كتابتها بهذا الشكل في المتغير الخارجي للهدف
لكن طبعا في الغالب سوف تجد أنه لا يمكن إلا كتابة أرقام صحيحه في خانة الهدف لذلك قم بتعديلها بدلا من جعله
سوف تجعلهاكود PHP:extern int TakeProfit=0;
كود PHP:extern double TakeProfit=0;
السلام عليكم ورحمة الله.
اخي مستر دولار عندي اضافه فكره على إكسبرت أوامر معلقة مع المضاعفات
لماذا لايتم اضافه المناقصات عكس المضاعفات .يعني اذا كان العقد الاول 8 يكون العقد الثاني 7 والثالث 6 وهكذا او الاول 8 والثاني 4 والثالت 2 وهكذا؟
تم دمج كود المؤشر مع الاكسبيرت بدون أخطاء في الكمبايل وللأسف لا يفتح أوامر بخطوط H و L
لكن خطرت ببالي فكرة للتأكد من استدعاء الخطوط
عملت شرط لكل خط
يعني H1 له شرط ; و H2 له شرط ..... وهكذا والمحصلة 41 شرط ل 82 دالة امر معلق :doh:
والنتيجة اشتغل الاكسبيرت بكفاءة وفتح الأوامر على جميع الخطوط كما هو مطلوب :asvc:
إذن نستنتج ان الاكسبيرت يستطيع استدعاء قيم المؤشر
والخطأ بالتأكيد يكمن في المتتالية الرياضية للخطوط i :
وجربت الدالة التالية ولم تنجح أيضا :كود PHP:for(int i=1;i<=20;i++)
{
double LineH=ObjectGet("Hi"+i,OBJPROP_PRICE1);
double LineL=ObjectGet("Li"+i,OBJPROP_PRICE1);
الان الاكسبيرت يعمل كما هو مطلوب، لكن الأكواد كثيرة جدا وأريد فقط اختصارها في علاقة رياضية ناجحة لمتتالية الخطوط وذلك للتخفيف عن المعالج في قراءة هذه الأكواد الكثيرة وأيضا ربما سرعة التنفيذ وأيضا حتى يكون الاكسبيرت سهل التعديل..كود PHP:for(int i=1;i<=20;i++)
{
double LineH=ObjectGet("H"+i,OBJPROP_PRICE1);
double LineL=ObjectGet("L"+i,OBJPROP_PRICE1);
بانتظارك أستاذي الكريم،...اتعبناك معنا بارك الله فيك على مجهودك الرائع
تحياتي من القلب يازعيم :eh_s(7):
ماهو الكود المطلوب ليفتح الاكسبيرت صفقة فى نفس اتجاه الصفقه الاولى كلما عكس السعر 10 نقاط
وشكرا مقدما
سوف تحتاج لعمل دالة تقوم بمعرفة سعر فتح آخر صفقه
ودالة لمعرفة نوع آخر صفقه فتحتكود PHP:double LastOpenPrice()
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
double price=OrderOpenPrice();
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==Magic&&OrderType()==type)
{
return(price);
}
}
}
ثم ستكون الشروطكود PHP:double LastOrderType()
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
int type=OrderType();
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==Magic&&OrderType()==type)
{
return(type);
}
}
}
كود PHP:if(LastOrderType()==OP_BUY&&LastOpenPrice()-Bid>=10*Point)
{
// open buy order
}
if(LastOrderType()==OP_SELL&&Ask-LastOpenPrice()>=10*Point)
{
// open sell Order
}
تمام أستاذي العزيز الاكسبيرت والمؤشر بالمرفقات
بالنسبة لشرط "ملامسة السعر للخط" هل صحيح ؟
ما هو الشرط الأدق لضمان تحقق ملامسة السعر للخطكود PHP:if ((Open[1]<=LineH&&Close[1]>=LineH)
جربت هذا الكود ولم ينجح !*
جزاك الله عنا كل خير :asvc:كود PHP:if (Ask==LineN)
برجاء المساعدة من خبراء البرمجة
هل هناك ما يشير فى هذا الكود الى ان الاكسبيرت يقوم بقراءة الهيستورى ويضع صفقاته بناءا عليه
كود PHP:int init() {
int li_0;
gt_unused_428 = Time[0];
gt_unused_432 = Time[0];
g_digits_584 = Digits;
if (g_digits_584 == 3 || g_digits_584 == 5) {
gd_524 = 10.0 * Point;
gd_532 = 10;
} else {
gd_524 = Point;
gd_532 = 1;
}
int l_ord_total_4 = OrdersTotal();
if (li_0 == 0 && l_ord_total_4 > 0) {
for (int l_pos_8 = 0; l_pos_8 < l_ord_total_4; l_pos_8++) {
if (OrderSelect(l_pos_8, SELECT_BY_POS)) {
if (OrderSymbol() == Symbol() && OrderMagicNumber() == magicbuy || OrderMagicNumber() == magicsell) {
li_0 = NormalizeDouble(OrderLots() / lots, (MarketInfo(Symbol(), MODE_MINLOT) == 0.01) + 1);
break;
}
}
}
}
int l_hist_total_12 = OrdersHistoryTotal();
if (li_0 == 0 && l_hist_total_12 > 0) {
for (l_pos_8 = 0; l_pos_8 < l_hist_total_12; l_pos_8++) {
if (OrderSelect(l_pos_8, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderSymbol() == Symbol() && OrderMagicNumber() == magicbuy || OrderMagicNumber() == magicsell) {
li_0 = NormalizeDouble(OrderLots() / lots, (MarketInfo(Symbol(), MODE_MINLOT) == 0.01) + 1);
break;
}
}
}
}
if (li_0 > 0) gd_632 = li_0;
return (0);
}
int start() {
double ld_8;
double ld_16;
g_ord_total_600 = OrdersTotal();
if (breakevengain > 0.0) {
for (int l_pos_0 = 0; l_pos_0 < g_ord_total_600; l_pos_0++) {
OrderSelect(l_pos_0, SELECT_BY_POS, MODE_TRADES);
if (OrderType() <= OP_SELL && OrderSymbol() == Symbol() && OrderMagicNumber() == magicbuy || OrderMagicNumber() == magicsell) {
if (OrderType() == OP_BUY) {
if (NormalizeDouble(Bid - OrderOpenPrice(), g_digits_584) < NormalizeDouble(breakevengain * gd_524, g_digits_584)) continue;
if (NormalizeDouble(OrderStopLoss() - OrderOpenPrice(), g_digits_584) >= NormalizeDouble(breakeven * gd_524, g_digits_584)) continue;
OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(OrderOpenPrice() + breakeven * gd_524, g_digits_584), OrderTakeProfit(), 0, Blue);
return (0);
}
if (NormalizeDouble(OrderOpenPrice() - Ask, g_digits_584) >= NormalizeDouble(breakevengain * gd_524, g_digits_584)) {
if (NormalizeDouble(OrderOpenPrice() - OrderStopLoss(), g_digits_584) < NormalizeDouble(breakeven * gd_524, g_digits_584)) {
OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(OrderOpenPrice() - breakeven * gd_524, g_digits_584), OrderTakeProfit(), 0, Red);
return (0);
}
}
}
}
}
if (trailingstop > 0.0 && maxtrades > 10) {
for (int l_pos_4 = 0; l_pos_4 < g_ord_total_600; l_pos_4++) {
OrderSelect(l_pos_4, SELECT_BY_POS, MODE_TRADES);
if (OrderType() <= OP_SELL && OrderSymbol() == Symbol() && OrderMagicNumber() == magicbuy || OrderMagicNumber() == magicsell) {
if (OrderType() == OP_BUY) {
if (!(NormalizeDouble(Ask, g_digits_584) > NormalizeDouble(OrderOpenPrice() + trailingstart * gd_524, g_digits_584) && NormalizeDouble(OrderStopLoss(), g_digits_584) < NormalizeDouble(Bid - (trailingstop +
trailingstep) * gd_524, g_digits_584) || OrderStopLoss() == 0.0)) continue;
OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Bid - trailingstop * gd_524, g_digits_584), OrderTakeProfit(), 0, Blue);
return (0);
}
if (NormalizeDouble(Bid, g_digits_584) < NormalizeDouble(OrderOpenPrice() - trailingstart * gd_524, g_digits_584) && NormalizeDouble(OrderStopLoss(), g_digits_584) > NormalizeDouble(Ask +
(trailingstop + trailingstep) * gd_524, g_digits_584) || OrderStopLoss() == 0.0) {
OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Ask + trailingstop * gd_524, g_digits_584), OrderTakeProfit(), 0, Red);
return (0);
}
}
}
}
if (trailingstop > 0.0 && maxtrades == 1) {
g_count_616 = 0;
g_count_608 = 0;
g_count_612 = 0;
for (g_pos_628 = 0; g_pos_628 < g_ord_total_600; g_pos_628++) {
OrderSelect(g_pos_628, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol() && OrderMagicNumber() == magicbuy || OrderMagicNumber() == magicsell && OrderCloseTime() == 0) {
g_count_616++;
g_ord_profit_556 = OrderProfit();
if (OrderType() == OP_BUY) {
g_ticket_500 = OrderTicket();
g_ord_open_price_452 = OrderOpenPrice();
g_datetime_436 = OrderOpenTime();
g_ord_stoploss_468 = OrderStopLoss();
g_ord_takeprofit_484 = OrderTakeProfit();
gi_unused_620 = OrderProfit();
g_count_608++;
}
if (OrderType() == OP_SELL) {
g_ticket_504 = OrderTicket();
g_ord_open_price_460 = OrderOpenPrice();
g_datetime_440 = OrderOpenTime();
g_ord_stoploss_476 = OrderStopLoss();
g_ord_takeprofit_492 = OrderTakeProfit();
gi_unused_624 = OrderProfit();
g_count_612++;
}
}
}
if (NormalizeDouble(g_ord_takeprofit_484 - Bid, g_digits_584) > trailingstart * gd_524 && g_count_608 > 0) OrderModify(g_ticket_500, g_ord_open_price_452, g_ord_stoploss_468, NormalizeDouble(g_ord_takeprofit_484 - trailingstop * gd_524, g_digits_584), 0, Blue);
if (NormalizeDouble(Bid - g_ord_takeprofit_492, g_digits_584) > trailingstart * gd_524 && g_count_612 > 0) OrderModify(g_ticket_504, g_ord_open_price_460, g_ord_stoploss_476, NormalizeDouble(g_ord_takeprofit_492 + trailingstop * gd_524, g_digits_584), 0, Red);
}
if (basketpercent) {
ld_8 = profit * (AccountBalance() / 100.0);
ld_16 = loss * (AccountBalance() / 100.0);
gd_444 = AccountEquity() - AccountBalance();
if (gd_444 >= ld_8 || gd_444 <= (-1.0 * ld_16)) {
for (g_pos_564 = g_ord_total_600 - 1; g_pos_564 >= 0; g_pos_564--) {
OrderSelect(g_pos_564, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol() && OrderMagicNumber() == magicbuy && OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, slippage * gd_524);
if (OrderSymbol() == Symbol() && OrderMagicNumber() == magicsell && OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, slippage * gd_524);
}
return (0);