طلب كود برمجة للمضاعفات بشكل عاجل
السلام عليكم و رحمة الله
أخواني المبرمجين اطلب منكم كود للمضاعفات بحيث ممكن اخليه على اكثر من عملة و ما يتدخل او يعدل على العملة الاخرى كل اكسبيرت يشتغل على الشارت تبعه.
بحيث اذا كانت الصفقة خاسرة يضاعف قيمة اللوت بحيث ممكن اخليه على اكثر من عملة و ما يتدخل او يعدل على العملة الاخرى و كل اكسبيرت يشتغل على الشارت تبعه فقط.
ملاحظة: انا لا اريد ان افتح صفقة في هذا الكود فقط أريده ان يقوم بتعديل (مضاعفة) اللوت عندما تكون الصفقة اغلقة على خسارة. و ارجو مراعات اني اريد ان ادرج الاكسبيرت على اكثر من شارت و ممكن تقفل اكثر من صفقة لعملات أخرى و لكن ليس للعملة التي يعمل عليها، انا هنا وجدت مشكلة حيث ان اللوت لم يحتسب بشكل صحيح.
اذا ممكن تزويدي بأكثر من كود للمضاعفات اكون لكم من الشاكرين.
و أشكر مروركم الكريم. و جزاكم الله عني ألف خير ...
رد:طلب كود برمجة للمضاعفات بشكل عاجل
اقتباس:
المشاركة الأصلية كتبت بواسطة SuccessTeam
ممكن تعطيني مثال، الشرط انه لما تكون الصفقة اغلقة على خسارة يتم مضاعفة قيمة اللوت فقط و ليس يفتح صفقة جديدة بلوت مضاعف.
كيف يعني لم افهم ؟
مضاعفة اللوت في حالة الخاسرة اما بغلق الصفقة الخاسرة او تركها
ويتم بفتح صفقة جديدة بلوت مضاعف
رد:طلب كود برمجة للمضاعفات بشكل عاجل
كود:
bool WinorLoss(){
bool win=true;
for(int i=0;i<OrdersHistoryTotal();i++){
OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol() && MagicNumber==OrderMagicNumber()){
if(OrderProfit()>0){
win=true;
}
else{
win=false;
}
}
}
return(win);
}
كود:
if(UseMultiplier){
if(WinorLoss()==false){Lots=MathMin(lastlot()* Multiplier,MarketInfo(Symbol(),MODE_MAXLOT));}
if(WinorLoss()==true){Lots=Firstlot;}
}
الكود الثاني هو الشرط ولك تحياتي
رد:طلب كود برمجة للمضاعفات بشكل عاجل
اقتباس:
المشاركة الأصلية كتبت بواسطة SuccessTeam
شكرا أخي
LOveR
ممكن ان تعطيني طريقة أخرى ، أو يمكن أحد من الأخوة عنده طريقة أخرى حتى ممكن أختار الأفضل أو أدمج بين أكثر من فكرة.
و لكم مني جزيل الشكر
طالما أنك ستضع شرط الماجيك نمبر في الإكسبرت فسيكون كافي لأن يتعامل كل إكسبرت مع الصفقات التي قام بفتحها فقط
سوف تحتاج دالة لمعرفة ربح آخر صفقة وأيضا حفظ حجم اللوت لها
كود PHP:
double LastOrderLots;
double LastOrderProfit()
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
LastOrderLots=OrderLots();
return(OrderProfit());
}
}
return(0);
}
ثم سيكون حجم اللوت الجديد
كود PHP:
double newlot;
if(LastOrderProfit()<0)newlot=LastOrderLots*2;
أيضا الكود الذي أرفقه لك الأخ Lover صحيح تماما
رد:طلب كود برمجة للمضاعفات بشكل عاجل
السلام عليكم ورحمة الله
أنا أستخدم هذا الكود من زمان في فكرة أعتقد نفس فكرتك ...
يفتح الإكسبيرت أوردر لو وصلت الهدف يكرر من جديد ولو ضرب
الستوب يستمر يضاعف كلما ضرب الستوب حتى يصل للهدف ويكون
بالطبع إجمالي العقود المضاعفة ربح مادام الهدف أكبر من الستوب.
ولكن فكرة إستخدامها على عدة أزواج قد تكون غير جيدة ...
إلا إذا إستخدمت حساب ميكرو وأقل عقد ممكن فقد تكون مناسبة
ولكن هذا في النهاية يتوقف على حسابك وكم يستطيع الصمود.
كود:
Start(){
...
...
...
LastClosedTrade();
if(LastOrderProfit < 0){
NewLots = NormalizeDouble(LastOrderLots*2,1);
if(NewLots>MaxLots) NewLots = MaxLots;
if(LastOrderType == 0 && NewLots<=MaxLots){//0 = Buy
ticket=OrderSend(Symbol(),OP_SELL,NewLots,Bid,Slippage,0,0,Expert_Name,MAGIC,0,Red);
if(ticket<0){ Print("Sell Order failed with error 3#",GetLastError()); }
if(UseSound) PlaySound("alert.wav");
Sleep(1000);
if(ticket>0){
OrderSelect(ticket,SELECT_BY_TICKET);
OrderModify(OrderTicket(),OrderOpenPrice(),Bid+SL*Point,Bid-TP*Point,0,Green);
}
}
if(LastOrderType == 1 && NewLots<=MaxLots){//1 = Sell
ticket=OrderSend(Symbol(),OP_BUY,NewLots,Ask,Slippage,0,0,Expert_Name,MAGIC,0,Blue);
if(ticket<0){ Print("Buy Order failed with error 4#",GetLastError()); }
if(UseSound) PlaySound("alert.wav");
Sleep(1000);
if(ticket>0){
OrderSelect(ticket,SELECT_BY_TICKET);
OrderModify(OrderTicket(),OrderOpenPrice(),Ask-SL*Point,Ask+TP*Point,0,Green);
}
}//if(LastOrderProfit<0)
...
...
...
}//start
void LastClosedTrade(){
int cnt, total;
total = OrdersHistoryTotal();
for(cnt=0;cnt<total; cnt++){
OrderSelect(cnt,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC && OrderProfit()!=0){
LastOrderType = OrderType();
LastOrderLots = OrderLots();
LastOrderProfit = OrderProfit();
}
}
}