استاذى مستر دولار
تم الرد فى الموضوع
تحياتى
Printable View
استاذى مستر دولار
تم الرد فى الموضوع
تحياتى
بارك الله فيك أخي الغالي وزادك من فضله
السلام عليكم ورحمة الله وبركاته
عندي مشكلة لكني تمكنت من حلها بعد أكثر من نصف يوم للأسف وأعتقد أنه يوجد حل أفضل وأسهل بحكم خبرتك الكبيرة في البرمجة
مثلا لنفرض أنه توجد عندنا 30 صفقة مغلقة لأربعة أزواج يعني كل زوج يتكرر اسمه أكثر من مرة في Mode History
اريد حل لاستخراج أسماء الازواج الأربعة بدون تكرار وإدخالهم في مصفوفة
في الأسفل يوجد الكود الخاص بي والذي يوجد به الحل الذي وفقني الله في إيجاده بعد جهد جهيد بحكم اني مبتدئ في هذا المجال.
ياريت أخي أسامة اذا كان هناك حل أفضل من هذا أن ترفقه لي وجزاك الله خيرا
الحل الذي حاولت معه مرارا وتكرارا والذي لم اجده هو حل يعتمد على مصفوفة واحدة pairs ثم البحث في سجل الصفقات المقفولة ثم يبدا التحقق من اسم كل زوج بواسطة حلقة تبحث في مصفوفة pairs عن اسم الزوج الذي وصلنا اليه في الحلقة الاولى الخاصة بالبحث في سجل الصفقات المغلوقة فاذا لم يكن اسم الزوج موجود في pairs نقوم بتسجيله فيها وننهي البحث في المصفوفة الثانية وهكذا ... لكني عندما طبقت هذه الطريقة يقوم البرنامج بطبع كل اسماء الازواج الموجودة في السجل
السلام عليكم ورحمة الله وبركاته
بفضل الله وله الحمد والشكر وجدت الحل .. مع ذلك يمكن يكون حل أفضل وأتمنى أن تفيدني به أخي الفاضل
كود PHP:
for(int i=1, c=0; i<OrdersHistoryTotal(); i++)
{
if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))break;
{
ArrayResize(pairs0,c+1); ArrayResize(pairs,c+1);
for(int j=0; j<ArraySize(pairs); j++)
{
if(pairs[j]==OrderSymbol()) break;
else if(pairs[j]!=OrderSymbol() && pairs0[j]!="1")
{
pairs[c]=OrderSymbol(); pairs0[c]="1"; c++;
break;
}
}
}
}
قبل أن أنسى أخي أسامة بالنسبة لؤشر الزوايا الذي قلت لك أني سأتحدى به بنفسي وأنظر ما إذا كنت سأستطيع صنعه .. قد وفقني الله في الإنتهاء من أغلبه بقي فقط زر واحد مازلت لم أتوصل لحل فعال معه وبقي نسخ ولصق الأكواد في switch ليشتغل المؤشر على كافة الفريمات ،المؤشر يعتمد على معادلات بدونها لن يرسم الخطوط بشكل دقيق وصحيح .. الحمد لله تمكنت من إيجاد أغلبها.
لكني أوقفت العمل عليه منذ مدة لأني وجدت بعض الأفكار يمكن أن تكون نتائجها جيدة في إكسبيرتات لذا أخي الفاضل لن أقوم بإكماله حتى أنتهي من هذه الاكسبيرتات ان شاء الله .. تحياتي
أقول لك هذا لأن رأيك يهمني في طريقة برمجتي له وفي الملاحظات التي ستقدمها
السلام عليكم مستر دولار
الرجاء شرح تفصيلي وشامل لكيفية التعامل مع اختلاف اسماء العملات بين المنصات بالنسبة ل Prefix و Suffix
مع شرح هذة الاكواد
الكود الاول
الكود الثانيكود PHP:
if(StringLen(Symbol()) >6 ) Prefix = StringSubstr(Symbol(),6,0);
بارك الله فيك ورزقك من حيث لا تحتسب وغفر لك ولوالديككود PHP:
string v1=StringSubstr(_Symbol,0,3);
string v2=StringSubstr(_Symbol,3,3);
string ValStr=v1+","+v2;
السلام عليكم ورحمة الله وبركاته
هل هناك طريقة للبحث عن نص في مصفوفة لأن الوظائف الخاصة بالبحث في المصفوفات ArrayBsearch غير خاصة بالنصوص. أيضا البحث والمقارنة بواسطة الحلقات ينتج عنه مشاكل ووجع راس :( وشكرا على رحابة صدركم :)
السلام عليكم ورحمة الله وبركاته
لقد وجدت طريقتين للبحث عن نص في مصفوفة بعد الكثير من التجارب. شكرا لكم
السلام عليكم ورحمة الله
عندى مشكله فى اغلاق الصفقات جميعها مره واحده حيث استخدمت دالة الاغلاق الاتيه والخاصه بالاستاذ مستر دولار
كود PHP:
void CloseSellOrders()
{
for (int cnt = 0 ; cnt < OrdersTotal() ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol())
{
if (OrderType()==OP_SELL)
{
OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,digits),3*Q);
}
}
}
}
شرط الاغلاقكود PHP:
void CloseBuyOrders()
{
for (int cnt = 0 ; cnt < OrdersTotal() ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol())
{
if (OrderType()==OP_BUY)
{
OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,digits),3*Q);
}
}
}
}
حيث تقوم الداله بأغلاق جزء من الصفقات ويبقى جزء لا يغلق ولا اعلم السبب على رغم من تحقق الشروطكود PHP:
if(profitusdt>=profitusd){
while(ordersbuy()>=1&&orderssell()>=1){CloseSellOrders();CloseBuyOrders();}
}
وفى اوقات اخرى تعمل الداله و يتم اغلاق جميع الصفقات على الرغم من تحقق نفس الشروط
الرجاء المساعده
السلام عليكم
ممكن تجرب هذه الدالة
تحياتى
كود PHP:
bool CloseDeleteAll(){ int total = OrdersTotal(); for (int cnt = total-1 ; cnt >=0 ; cnt--) { if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)) if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==Symbol()&&MagicNumber==OrderMagicNumber()){ switch(OrderType()) { case OP_BUY : { if(!OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),0,Violet)) return(false); }break; case OP_SELL : { if(!OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),0,Violet)) return(false); }break; } if(OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP || OrderType()==OP_BUYLIMIT || OrderType()==OP_SELLLIMIT) if(!OrderDelete(OrderTicket())) { Print("Error deleting " + (string)OrderType() + " order : ",GetLastError()); return (false); } } } } return (true);}
عزيزي شنكوتي
لن ارفق لك اكواد ، لكن ساوضح لك لماذا لا تغلق كل الصفقات
الصفقات مرقمة في الجهاز 1 ، 2 ، 3 ... الى عدد صفقاتك المفتوحة
وانت عندما تعمل حلقة دوران من 1 الى عدد الصفقات و عندما تحذف الصفقة الاولى ، يتم اعادة الترتيب و الصفقة رقم 3 تصبح رقم 2 و الصفقة 4 تصبح 3 و هكذا
فعند تنفيذ الحلقة الدورانية بقيمة i= 2 يتم فعليا حذف الصفقة رقم 3 و الصفقة 2 تبقى معلقة و كل ما تحذف صفقة تختلط الارقام اكثر.
للخروج من المشكلة و اغلاق جميع الصفقات فقط اعمل الحلقة الدورانية معكوسة يعني ابدا من الصفقة الاخيرة و بلش اجلد بالعكس
تحياتي
بفضل تكتب كودك بنفسك
هذا الكود يغلق كل الصفقات المفتوحة و يحذف ايضا الاوامر المعلقة
كود PHP:
void closeAllPositions() { bool result;
for(int x=OrdersTotal();x>=0;x--)
{ if(OrderSelect(x,SELECT_BY_POS)==true )
{ if ( OrderSymbol() == Symbol() && OrderMagicNumber()==Magic)
{ if( OrderType() <= 1 ) result=OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0,clrNONE);
// delete buy and sell orders
else result = OrderDelete(OrderTicket()); // delete pending orders ; } }} }