رد:موضوع مخصص للأسئلة البرمجية
استاد ماستر دولار لي سؤالين بارك الله فيك
الاول
هل الداليتن المرفقتين صحيحتين لتغيير ستوب اخر صفقة مفتوحة
كود PHP:
void modifylastopenbuyorder(double stop)
{
int last=OrdersTotal()-1;
OrderSelect(last,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol())
{
if (OrderType()==OP_BUY)
{
OrderModify(OrderTicket(),OrderOpenPrice(),stop,OrderTakeProfit(),0,Blue);
}
}
}
void modifylastopensellorder(double stop)
{
int last=OrdersTotal()-1;
OrderSelect(last,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol())
{
if (OrderType()==OP_SELL)
{
OrderModify(OrderTicket(),OrderOpenPrice(),stop,OrderTakeProfit(),0,Blue);
}
}
}
الثاني
هل ادا طبقت الحل الموجود في هده المشاركة
https://forum.arabictrader.com/t3761...ml#post2664590
الدي يبحت عن اول تك في شمعة جديدة استطيع ان اتخلى عن شرط
الدي نضعه لكي يفنح الاكسبيرت صفقة وحيدة ادا تحققت الشروط
لان الحل اعلاه سيمكنني من تنفيد الشروط عن اول تك في الشمعة الجديدة فقط
بارك الله فيك
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة kira-h
تمام أستاذي العزيز الاكسبيرت والمؤشر بالمرفقات
بالنسبة لشرط "ملامسة السعر للخط" هل صحيح ؟
كود PHP:
if ((Open[1]<=LineH&&Close[1]>=LineH)
ما هو الشرط الأدق لضمان تحقق ملامسة السعر للخط
جربت هذا الكود ولم ينجح !*
جزاك الله عنا كل خير :asvc:
أولا بالنسبه لشرط الملامسه هذا الشرط سيدخل بعد إغلاق الشمعه أعلى أو أسفل الخط وليس الملامسه
لذلك الشرط الصحيح
كود PHP:
if ((Open[0]<=LineH&&Close[0]>=LineH)
وبما أنك تعتمد في الشروط على الملامسه فيجب أن تجعل الإكسبرت يتحقق من السعر مع كل تحرك للسعر وليس مره واحده كل شمعه كما وضعت في شروط الإكسبرت
كود PHP:
void OncePerBar()
{
if (BarTime < Time[0])
{
// we have a new bar opened
BarTime = Time[0]; // keep the new bar open time
LimitOpenOrders();
}
}
فيجب أن تلغي هذا الشرط
أخيرا أنت تريد وضع الشروط بحيث يضع الأمر المعلق عند الخط الذي يلامسه لكنك وضعت الداله
كود PHP:
void BuyOrderH()
{
for( int i=1;i<=20;i++)
{
double LineH=ObjectGet("Hi"+i,OBJPROP_PRICE1);
double price = (NormalizeDouble(LineH, NDigits) + (SellStep*PipValue*Point));
double SL = price - Stoploss*PipValue*Point;
if (Stoploss == 0) SL = 0;
double TP = price + Takeprofit*PipValue*Point;
if (Takeprofit == 0) TP = 0;
int Tries;
int ticket = -1;
if (ECNBroker)
{
ticket = OrderSend(Symbol(), OP_BUYSTOP, Lots, price, Slippage, 0, 0, "Kira-h", MagicNo, 0, Blue);
if(ticket>-1 && Tries<10)
{
OrderSelect(ticket, SELECT_BY_TICKET);
OrderModify(ticket, OrderOpenPrice(), SL, TP, 0, Blue);
Tries++;Sleep(1000);
}
}
else
ticket = OrderSend(Symbol(), OP_BUYSTOP, Lots, price, Slippage, SL, TP, "Kira-h", MagicNo, 0, Blue);
}
}
فبالتالي عند تحقق الشرط عند كل خط سوف يقوم بوضع الأوامر عند جميع الخطوط وهذا خطأ لأن أحيانا سيكون مكان وضع الأمر المعلق خاطئ
فالصحيح أنك ستضع الأمر المعلق عند الخط الملامس فقط ( حسب فهمي لطلبك ) لذلك إجعل كود مقارنة تحقق الشرط وكود فتح الصفقه في حلقة واحده
إذا عدت هذه الشروط فلن تجد أخطاء أخرى بإذن الله
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة العوامى
برجاء المساعدة من خبراء البرمجة
هل هناك ما يشير فى هذا الكود الى ان الاكسبيرت يقوم بقراءة الهيستورى ويضع صفقاته بناءا عليه
كود 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);
لا يوجد مع العلم هذا الكود لا يفتح صفقات أساسا فالكود عبارة عن تريلينج ستوب للصفقات و إغلاق على نسبة مئويه للصفقات المفتوحه
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة توفيق
استاد ماستر دولار لي سؤالين بارك الله فيك
الاول
هل الداليتن المرفقتين صحيحتين لتغيير ستوب اخر صفقة مفتوحة
كود PHP:
void modifylastopenbuyorder(double stop)
{
int last=OrdersTotal()-1;
OrderSelect(last,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol())
{
if (OrderType()==OP_BUY)
{
OrderModify(OrderTicket(),OrderOpenPrice(),stop,OrderTakeProfit(),0,Blue);
}
}
}
void modifylastopensellorder(double stop)
{
int last=OrdersTotal()-1;
OrderSelect(last,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol())
{
if (OrderType()==OP_SELL)
{
OrderModify(OrderTicket(),OrderOpenPrice(),stop,OrderTakeProfit(),0,Blue);
}
}
}
الثاني
هل ادا طبقت الحل الموجود في هده المشاركة
https://forum.arabictrader.com/t3761...ml#post2664590
الدي يبحت عن اول تك في شمعة جديدة استطيع ان اتخلى عن شرط
الدي نضعه لكي يفنح الاكسبيرت صفقة وحيدة ادا تحققت الشروط
لان الحل اعلاه سيمكنني من تنفيد الشروط عن اول تك في الشمعة الجديدة فقط
بارك الله فيك
نعم الداله ستقوم بتغيير آخر صفقة مفتوحه لكن إذا كنت تستخدم أكثر من إكسبرت مثلا أو تفتح صفقات يدويا فقد تكون آخر صفقة مفتوحه ليست من صفقات الإكسبرت بالتالي لن يتحقق الشرط ولن تتغير الصفقه
لذلك إذا كنت تقصد تغيير ستوب آخر صفقة فتحها الإكسبرت فيجب أن تستخدم الحلقه للبحث عن آخر صفقة مفتوحه وتغييرها
وأيضا إستخدم شرط المقارنه أن الأستوب الجديد الذي تريد وضعه لا يساوي الأستوب القديم حتى لا يحدث خطأ في حال قمت بتغييره وهو نفسه
مثال
كود PHP:
void modifylastopenbuyorder(double stop)
{
for(int last=OrdersTotal()-1;last>=0;last--)
{
OrderSelect(last,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol())
{
if (OrderType()==OP_BUY&&stop!=OrderStopLoss())
{
OrderModify(OrderTicket(),OrderOpenPrice(),stop,OrderTakeProfit(),0,Blue);
break;
}
}
}
}
بالنسبه للجزء الثاني نعم يمكنك إستخدامه سيكون بديل
رد:موضوع مخصص للأسئلة البرمجية
السلام عليكم ورحمه الله
تحية طيبة للجميع
استاذي العزيز اسامة
اريد عمل اكسبيرت مضاعفات جمعي في البيع والشراء 543212345 اي يضاعف في الاتجاهين يضاعف عند الانعكاس ويضاعف في اتجاة الربح واريد ان اجعل خيار لايقاف المضاعفة في اتجاة الربح سوى في البيع او الشراء
كيف اكتب الكود
وجزاك الله كل خير
مع تمنياتي للجميع بالتوفيق
لاتنساني من دعائك
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة ecash
السلام عليكم ورحمه الله
تحية طيبة للجميع
استاذي العزيز اسامة
اريد عمل اكسبيرت مضاعفات جمعي في البيع والشراء 543212345 اي يضاعف في الاتجاهين يضاعف عند الانعكاس ويضاعف في اتجاة الربح واريد ان اجعل خيار لايقاف المضاعفة في اتجاة الربح سوى في البيع او الشراء
كيف اكتب الكود
وجزاك الله كل خير
مع تمنياتي للجميع بالتوفيق
لاتنساني من دعائك
تحتاج الى شرط تفعيل المضاعفات في حالة الربح
يعني كمثال فقط
if(win=true)
{
lot=2*mul
}
else
{
lot=1
}
كمثال يعني في حالة الربح وهو رمز win تغير من حالته
وفي دالة شرط اخرى حددها عندما يصل الربح الى القيمة المناسبة يرجع ليلاحظ هل win=true ام لا ومن هنا يتم التحكم في اللوت
يعني دوال شرطية تعتمد عليها
انا بصدد اعطيك فكرة فقط لا اكواد جاهزة حتى تتخيل الفكرة البرمجية
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة wadi2012
تحتاج الى شرط تفعيل المضاعفات في حالة الربح
يعني كمثال فقط
if(win=true)
{
lot=2*mul
}
else
{
lot=1
}
كمثال يعني في حالة الربح وهو رمز win تغير من حالته
وفي دالة شرط اخرى حددها عندما يصل الربح الى القيمة المناسبة يرجع ليلاحظ هل win=true ام لا ومن هنا يتم التحكم في اللوت
يعني دوال شرطية تعتمد عليها
انا بصدد اعطيك فكرة فقط لا اكواد جاهزة حتى تتخيل الفكرة البرمجية
السلام عليكم ورحمه الله
تحية طيبة للجميع
شكرا لك اخي لاكني اريد الكود حتى اتعلم منه لان هذا النوع قليل ان تجد اكسبيرت يعمل بنفس الطريقة بعدها افكر كيف اتحكم فية ليكون اكسبيرت ناجح لان مايميز الاكسبيرت هو الارباح الكبيرة والغير موجودة في اي اكسبيرت تم برمجتة
وفي انتظار الاستاذ اسامة
احاول تعلم البرمجه لاكن احتاج الى وقت لان تركيزي كان في الموشرات
مع تمنياتي للجميع بالتوفيق
لاتنساني من دعائك
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة MR.dollar
أولا بالنسبه لشرط الملامسه هذا الشرط سيدخل بعد إغلاق الشمعه أعلى أو أسفل الخط وليس الملامسه
لذلك الشرط الصحيح
كود PHP:
if ((Open[0]<=LineH&&Close[0]>=LineH)
وبما أنك تعتمد في الشروط على الملامسه فيجب أن تجعل الإكسبرت يتحقق من السعر مع كل تحرك للسعر وليس مره واحده كل شمعه كما وضعت في شروط الإكسبرت
كود PHP:
void OncePerBar()
{
if (BarTime < Time[0])
{
// we have a new bar opened
BarTime = Time[0]; // keep the new bar open time
LimitOpenOrders();
}
}
فيجب أن تلغي هذا الشرط
أخيرا أنت تريد وضع الشروط بحيث يضع الأمر المعلق عند الخط الذي يلامسه لكنك وضعت الداله
كود PHP:
void BuyOrderH()
{
for( int i=1;i<=20;i++)
{
double LineH=ObjectGet("Hi"+i,OBJPROP_PRICE1);
double price = (NormalizeDouble(LineH, NDigits) + (SellStep*PipValue*Point));
double SL = price - Stoploss*PipValue*Point;
if (Stoploss == 0) SL = 0;
double TP = price + Takeprofit*PipValue*Point;
if (Takeprofit == 0) TP = 0;
int Tries;
int ticket = -1;
if (ECNBroker)
{
ticket = OrderSend(Symbol(), OP_BUYSTOP, Lots, price, Slippage, 0, 0, "Kira-h", MagicNo, 0, Blue);
if(ticket>-1 && Tries<10)
{
OrderSelect(ticket, SELECT_BY_TICKET);
OrderModify(ticket, OrderOpenPrice(), SL, TP, 0, Blue);
Tries++;Sleep(1000);
}
}
else
ticket = OrderSend(Symbol(), OP_BUYSTOP, Lots, price, Slippage, SL, TP, "Kira-h", MagicNo, 0, Blue);
}
}
فبالتالي عند تحقق الشرط عند كل خط سوف يقوم بوضع الأوامر عند جميع الخطوط وهذا خطأ لأن أحيانا سيكون مكان وضع الأمر المعلق خاطئ
فالصحيح أنك ستضع الأمر المعلق عند الخط الملامس فقط ( حسب فهمي لطلبك ) لذلك إجعل كود مقارنة تحقق الشرط وكود فتح الصفقه في حلقة واحده
إذا عدت هذه الشروط فلن تجد أخطاء أخرى بإذن الله
جزاك الله خيرا أستاذي الكريم
عملت المطلوب ولازالت نفس المشكلة بالباكتيست
على العموم يبدو ان المشكلة من المؤشر نفسه! لذلك سأكتفي بالطريقة العادية ولو انها متعبة (لكل خط له شرط خاص به...) والحمد لله كل شيء تمام
بارك الله فيك أستاذي وشكرا جزيلا :eh_s(7):
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة ecash
السلام عليكم ورحمه الله
تحية طيبة للجميع
شكرا لك اخي لاكني اريد الكود حتى اتعلم منه لان هذا النوع قليل ان تجد اكسبيرت يعمل بنفس الطريقة بعدها افكر كيف اتحكم فية ليكون اكسبيرت ناجح لان مايميز الاكسبيرت هو الارباح الكبيرة والغير موجودة في اي اكسبيرت تم برمجتة
وفي انتظار الاستاذ اسامة
احاول تعلم البرمجه لاكن احتاج الى وقت لان تركيزي كان في الموشرات
مع تمنياتي للجميع بالتوفيق
لاتنساني من دعائك
وعليكم السلام ورحمة الله وبركاته
سوف تقوم بعمل دالة لمعرفة سعر فتح آخر صفقة ونوع الصفقه
مثال
كود 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:
double LastOpenPrice()
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==Magic&&OrderType()==type)
{
return(OrderOpenPrice());
}
}
}
وطبعا دالة لمعرفة حجم آخر لوت للصفقه
كود PHP:
double LastLot()
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
double L=OrderLots();
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==Magic&&OrderType()==type)
{
return(L);
}
}
}
ثم ستضع الشرط وهنا سيكون شرطين بدلا من شرط المضاعفات العادي بحيث ستضع شرط المضاعفه عند الربح وعند الخساره
مثال
كود PHP:
if(LastOrderType()==OP_BUY&&(LastOpenPrice()-Bid>=Step*Point)||(Bid-LastOpenPrice()>=Step*Point&&OpenWinMultiplier))
{
double newLot=LastLot()*2;
OrderSend(Symbol(),OP_BUY,newLot,NormalizeDouble(Ask,Digits),3,0,0,"EA",MagicNumber,0,Blue);
}
if(LastOrderType()==OP_SELL&&(Ask-LastOpenPrice()>=Step*Point)||(LastOpenPrice()-Ask>=Step*Point&&OpenWinMultiplier))
{
newLot=LastLot()*2;
OrderSend(Symbol(),OP_SELL,newLot,NormalizeDouble(Bid,Digits),3,0,0,"EA",MagicNumber,0,Blue);
}
المتغير OpenWinMultiplier هو المتغير الخارجي الخاص بتفعيل خيارة فتح صفقات مضاعفات في إتجاه الربح أو لا
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة waleedgadelmola
السلام عليكم استاذ أسامة
لدي استراتيجية بحاول اعمل لها اكسبرت ومش ظابط معايا
بكل بساطة هي عباره عن ثلاثة موفنج افرج باعدادات مختلفة اسمائهم 1 2 3 على التوالي وكذلك مؤشر الماكد بالاعدادات الافتراضية :
شروط الدخول:
1- الشراء: عندما يقطع الموفينج رقم 1 الموفينجين 2 و 3 من الأسفل للأعلى ويتأكد ذلك من مؤشر الماكد بأن يصبح فوق الصفر
2- البيع:عندما يقطع الموفينج رقم 1 الموفنجين 2 و 3 من الأعلى للأسفل ويتأكد ذلك من مؤشر الماكد بأن يصبح تحت الصفر
يا ريت استاذ أسامة تقلي كمان اكتب ازاي المتغيرات الخاصة بالموفنجات علشان محتار في ارقام الشموع سواء 0 او 1 او 2 وكمان مؤشر الماكد أختار الـ ماين ولا سجنال يكون تحت الصفر او فوق الصفر
جزاك الله خير
وعليكم السلام ورحمة الله
بعد أذن الأستاذ أسامة ، بالنسبة للموفنجات الثلاثة حتحتاج تضيف في المتغيرات هذا الكود حتى يستطيع المستخدم التغيير
كود PHP:
extern int moving1=7; extern int moving1_mode=1;
extern int moving2=21; extern int moving2_mode=1;
extern int moving3=55; extern int moving3_mode=1;
بعدها برضه في المتغيرات حتخزن القيم التالية
كود PHP:
double ma1,ma2,ma3;
بعدها في دالة ستارت حتربط القيم بالموفنجات
كود PHP:
ma1=iMA(NULL,0,moving1,0,moving1_mode,PRICE_CLOSE,1);
ma2=iMA(NULL,0,moving2,0,moving2_mode,PRICE_CLOSE,1);
ma3=iMA(NULL,0,moving3,0,moving3_mode,PRICE_CLOSE,1);
بعدها في دالة ستارت تضيف شرط البيع وشرط الشراء
كود PHP:
if(ma1>ma2&&ma1>ma3&&ma2>ma3){/// Buy }
if(ma1<ma2&&ma1<ma3&&ma2<ma3){/// Sell }
بالنسبة للماكد انت تختار السيجنال او المين او كما تريد وتفضل الكود
البداية بالمتغيرات
كود PHP:
extern int fast_ema_period=12;
extern int slow_ema_period=26;
extern int signal_period=9;
extern int applied_price=0;
extern int mode=0;
بعدها نرجع لتخزين القيم مثل ماعملنا مع الموفنجات
كود PHP:
double amacd,bmacd;
ثم نربط القيم مع الماكد
كود PHP:
amacd=iMACD(NULL, NULL,fast_ema_period,slow_ema_period,signal_period,applied_price,mode,1);
bmacd=iMACD(NULL, NULL,fast_ema_period,slow_ema_period,signal_period,applied_price,mode,2);
ثم شرط البيع او الشراء
كود PHP:
if (amacd > 0 && bmacd < 0 )
وعكسه للبيع
نصيحة الأفضل تبتدي بالموفنجات او بالماكد منفصلين حتى تضبط بعدها تشتغل على الأثنين
بالتوفيق وليد .
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة MR.dollar
كود PHP:
double LastOpenPrice()
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==Magic&&OrderType()==type)
{
return(OrderOpenPrice());
}
}
}
بالنسبة للدالة for
وتحديدا
كود PHP:
i=OrdersTotal()-1
ماذا لو كان هكذا
هل سيعطي قيمة مختلفة او اي خطأ ؟
لاني لم الحظ ذلك
وشكرا