النتائج 9,781 إلى 9,795 من 10335
الموضوع: موضوع مخصص للأسئلة البرمجية
- 22-01-2020, 08:10 PM #9781
أهلا بك أخي
مثلا ..
Order1 win
Order2 loss
Order3 loss
Order 4 win
Order 5 loss
Order 6 win
Order 7 loss
Order 8 loss
Order 9 win
Order 10 loss
Order 11 loss
Order 12 loss
Order 13 loss
Order 14 win
مثلا في هدا السناريو الكود يجب أن يحسب مجموع الخسارة لكل صفقتين خاسرتين بصفة متتالية :
(Order2+Order3) + (order7+Order8)+(Order10+Order11)+(Order12+Order13 )
هل هدا ممكن ؟
شكرا مسبقا
- 23-01-2020, 01:33 AM #9782
عندى يا أستاذ أسامة اكسبرت من تصميمك
ولكن ينقصه شيىء واحد فقط
win_usd_all
هل ممكن تضيفى هذا الخيار فى الاكسبرت
اغلاق جميع الصفقات على ربح بالدولار
وشكرا
- 23-01-2020, 02:45 AM #9783
السلام عليكم
استاذ اسامة حاولت جاهدا احول كود ناسخ الصفقات انو ينسخ من mt5 لكن دون جدوى ما بكتب اشي في الماستر وهذا هو الكود
//+------------------------------------------------------------------+
//| testmas.mq5 |
//| Copyright 2020, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
#import "kernel32.dll"
int CreateFileW(string Filename, uint AccessMode, int ShareMode, int PassAsZero, int CreationMode, int FlagsAndAttributes, int AlsoPassAsZero);
int ReadFile(int FileHandle, uchar & Buffer[], int BufferLength, int & BytesRead[], int PassAsZero);
int SetFilePointer(int FileHandle, int Distance, int PassAsZero, int FromPosition);
int GetFileSize(int FileHandle, int PassAsZero);
int CloseHandle(int FileHandle);
#import
#define GENERIC_READ 0x80000000
#define WIN32_FILE_SHARE_READ 1
#define WIN32_FILE_SHARE_WRITE 2
#define OPEN_EXISTING 3
#define SEEK_FILE_BEGIN 0
#define SEEK_FILE_CURRENT 1
#define INVALID_HANDLE_VALUE -1
#define READ_BUFFER_SIZE 1024
input int LoopTime = 500;
input bool ReverseTrades = false;
input bool Reverse_SL_TP_InReverseMode=true;
input string info1=" Copy Orders Settings ";
input bool CopyBuyOrders=true;
input bool CopySellOrders=true;
input bool CopyPendingOrders=true;
input bool MagicNumberFilter=false;
input int MagicNumber=0;
input bool CommentFilter=false;
input string Comments="";
int handle;
double OrderInfo[1][5];
datetime StartTime;
string name;
int OnInit()
{
//---
StartTime=TimeCurrent();
name="ATCopierMaster.txt";
handle=FileOpen(name,FILE_TXT|FILE_WRITE|FILE_SHAR E_READ|FILE_SHARE_WRITE);
return (INIT_SUCCEEDED);
//---
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
FileClose(handle);
FileDelete("ATCopierMaster.txt");
Comment("");
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
static int size;
static int LastTotalOrders;
while (IsStopped() == false)
{
if(OrdersTotal()==LastTotalOrders)continue;
LastTotalOrders=OrdersTotal();
for(int i=0;i<OrdersTotal();i++)
{
double price=PositionGetDouble(POSITION_PRICE_OPEN);
double sl=PositionGetDouble(POSITION_SL);
double tp=PositionGetDouble(POSITION_TP);
int ticket=PositionGetInteger(POSITION_TICKET);
int type=PositionGetInteger(POSITION_TYPE);
string symbol=PositionGetString(POSITION_SYMBOL);
double expir=0;
double Lots=PositionGetDouble(POSITION_VOLUME);
datetime OpenTime=PositionGetInteger(POSITION_TIME);
int PosMagicNo=PositionGetInteger(POSITION_MAGIC);
if(OpenTime<StartTime||(PosMagicNo!=MagicNumber&&M agicNumberFilter))continue;
if((type==ORDER_TYPE_SELL&&!CopySellOrders)||(type ==ORDER_TYPE_BUY&&!CopyBuyOrders)||(type>ORDER_TYP E_SELL&&!CopyPendingOrders))continue;
if(OrderRecorded(ticket)==false)
{
if(ArrayRange(OrderInfo,0)<=size)ArrayResize(Order Info,size+1);
OrderInfo[size][0]=price;
OrderInfo[size][1]=sl;
OrderInfo[size][2]=tp;
OrderInfo[size][3]=expir;
OrderInfo[size][4]=ticket;
size++;
double Set_SL=sl,Set_TP=tp;
if(ReverseTrades)
{
if(Reverse_SL_TP_InReverseMode){Set_SL=tp;Set_TP=s l;}
else{Set_SL=sl;Set_TP=tp;}
if(type==0){type=1;}
else if(type==1){type=0;}
}
int write=FileWriteString(handle,ticket+"|"+StringSubs tr(symbol,0,6)+"|"+type+"|"+Lots+"|"+DoubleToStrin g(price,_Digits)+"|"+DoubleToString(Set_SL,_Digits )+"|"+DoubleToString(Set_TP,_Digits)+"|"+"\n");
FileFlush(handle);
}
}
DeleteOldData();
}
}
//+------------------------------------------------------------------+
bool OrderRecorded(int ticket)
{
for(int i=0;i<=ArrayRange(OrderInfo,0);i++){
if(ticket==OrderInfo[i][4])return(true);
}
return(false);
}
int Array_Index(int ticket){
for(int i=0;i<ArrayRange(OrderInfo,0);i++){
if(OrderInfo[i][4]==ticket)return(i);
}
return(-1);
}
void DeleteOldData()
{
string Data_Info[];
int NewSize;
int handlee=OpenExistingFileForReading(TerminalInfoStr ing(TERMINAL_DATA_PATH)+"\MQL4\Files\ATCopierMaste r.txt",true,true);
if(IsValidFileHandle(handlee))
{
while(!IsFileAtEnd(handlee))
{
string line=ReadLineFromFile(handlee,"\n");
NewSize++;
ArrayResize(Data_Info,NewSize);
Data_Info[NewSize-1]=line;
}
}
CloseFile(handlee);
FileClose(handle);
handle=FileOpen(name,FILE_TXT|FILE_WRITE|FILE_SHAR E_READ|FILE_SHARE_WRITE);
// delete order info if order is not exist
string ticket;
for(int i=0;i<NewSize;i++)
{
for(int j=0;j<StringLen(Data_Info[i]);j++)
{
if(StringSubstr(Data_Info[i],j,1)=="|")
{
ticket=StringSubstr(Data_Info[i],0,j);
break;
}
}
if(!IsOrderExist(StringToInteger(ticket)))continue ;
int write=FileWriteString(handle,Data_Info[i]+"\n");
FileFlush(handle);
}
}
bool IsOrderExist(int ticket)
{
int total= PositionsTotal();
for(int i=0;i<total;i++)
{
if(PositionGetSymbol(i)==_Symbol)
{
if(PositionGetInteger(POSITION_TYPE)==POSITION_TYP E_BUY)
{
if(PositionGetInteger(POSITION_TICKET)==ticket)
{
return(true); //is exist
}
}
}
}
return(false);
/*else if(PositionGetInteger(POSITION_TYPE)==POSITION_TYP E_SELL)
{
Sell_opened=true; // It is a Sell
}*/
}
int OpenExistingFileForReading(string FileName, bool ShareForReading = true, bool ShareForWriting = false)
{
int ShareMode = 0;
if (ShareForReading) ShareMode += WIN32_FILE_SHARE_READ;
if (ShareForWriting) ShareMode += WIN32_FILE_SHARE_WRITE;
return (CreateFileW(FileName, GENERIC_READ, ShareMode, 0, OPEN_EXISTING, 0, 0));
}
string ReadLineFromFile(int FileHandle, string Terminator = "\r\n")
{
// Holds the line which is eventually returned to the caller
string Line = "";
// Keep track of the file pointer before we start doing any reading
int InitialFilePointer = SetFilePointer(FileHandle, 0, 0, SEEK_FILE_CURRENT);
// Keep reading from the file until we get the end of the line, or the end of the file
bool bContinueRead = true;
while (bContinueRead)
{
// Receives the number of bytes read from the file. Note that MQL can only pass
// arrays as by-reference parameters to DLLs
int BytesRead[1] = {0};
// Allocate a buffer
uchar ReadBuffer[];
ArrayResize(ReadBuffer, READ_BUFFER_SIZE + 1);
// Do a read of up to READ_BUFFER_SIZE bytes
ReadFile(FileHandle, ReadBuffer, READ_BUFFER_SIZE, BytesRead, 0);
// Check whether any data has been read...
if (BytesRead[0] != 0)
{
// Add the new data to the line we've built so far
Line = StringConcatenate(Line,0, CharArrayToString(ReadBuffer, 0, BytesRead[0]));
// Does the line now contain the specified terminator?
int pFindTerminator = StringFind(Line, Terminator);
if (pFindTerminator != -1)
{
// The line does contain the specified terminator. Remove it from the data we're
// going to pass back to the caller
Line = StringSubstr(Line, 0, pFindTerminator);
// We've almost certainly read too much data - i.e. the latest 200 byte block
// intrudes into the next line. Need to adjust the file pointer to the start
// of the next line. This must be the file pointer before we started reading, plus
// the length of the line we've read, plus the length of the terminator
SetFilePointer(FileHandle, InitialFilePointer + StringLen(Line) + StringLen(Terminator), 0, SEEK_FILE_BEGIN);
// Stop reading
bContinueRead = false;
} else {
// The line read so far does not yet contain the specified terminator
bContinueRead = true;
}
} else {
// Either at the end of the file, or the file handle is not valid for reading
bContinueRead = false;
}
}
return (Line);
}
bool IsFileAtEnd(int FileHandle)
{
int CurrentFilePointer = SetFilePointer(FileHandle, 0, 0, SEEK_FILE_CURRENT);
return (CurrentFilePointer >= GetFileSize(FileHandle, 0));
}
bool IsValidFileHandle(int FileHandle)
{
return (FileHandle != INVALID_HANDLE_VALUE);
}
void CloseFile(int FileHandle)
{
CloseHandle(FileHandle);
}
- 26-01-2020, 12:17 AM #9784
مهندسنا الغالي ان شاءالله ان تكون في تمام الصحة والعافية
الحمدلله حولت ناسخ الصفقات الماستر الى mt5 بس اخلص من slave
برفعهم وتصححلي الخطأ ان وجد بارك الله فيك وفي علمك
تحياتي
- 26-01-2020, 11:06 AM #9785
اي لغة اقوى ال ASP ولا PHP
- 28-01-2020, 06:15 PM #9786
مرة شفت اكسبرت فى المنتدى وظيفته فقط
عمل تعديل لقوالب العملات كلها نفس الشيىء
بمعنى هلا بدى اضع اكسبرت مثلا واعدادات معينة على مثلا 60 زوج عندى فى المنصة
لازم اعدلها لوحدى كل زوج لحاله يعنى وقت وجهد كبير خاصة لوحبيت اعمل تعديل عدة مرات على كل العملات
موجود هو بالمنتدى لكن انسيت شو اسمه ووين موجود
يا ريت الى بيعرف يدلنى عليه
وشكرا
- 28-01-2020, 07:26 PM #9787
- 28-01-2020, 07:27 PM #9788
- 28-01-2020, 07:28 PM #9789
هذه دالة لحساب مجموع الربح بالدولار
كود PHP:double TotalProfit()
{
double profit=0;
for(int i=OrdersTotal()-1; i>=0; i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderType()<=OP_SELL && OrderMagicNumber()==MagicNumber)
{
profit+=OrderProfit();
}
}
return(profit);
}
كود PHP:void CloseOrders()
{
for(int i=OrdersTotal()-1; i>=0; i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber )
{
if(OrderType()==OP_BUY)
{
bool close=OrderClose(OrderTicket(),OrderLots(),Bid,3*P);
}
else
if(OrderType()==OP_SELL)
{
close=OrderClose(OrderTicket(),OrderLots(),Ask,3*P);
}
else
{
bool del=OrderDelete(OrderTicket());
}
}
}
}
كود PHP:if(TotalProfit()>=ProfitUSD && ProfitUSD!=0)
{
CloseOrders();
}
- 28-01-2020, 08:52 PM #9790
- 28-01-2020, 10:36 PM #9791
لو سمحت مستر دولار هذا الكود من تصميمك وهو تريلينج ستوب مخفي وتريلينج بالانس مخفي ولكن لايوجد به سوي هذه الاعدادات
كود PHP:input bool Use_Hidden_Trailing_Stop=true;
input int HiddenTrailingStopPips=20;
input bool Use_Hidden_Trailing_Percent=true;
input double TrailingPercent=1;
HiddenTrailingStep
TrailingPercentStep
كود PHP:void HiddenTrailingStop()//حساب التريلينج استوب المخفي
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol() && OrderType()<=OP_SELL && HiddenTrailingStopPips>0)
{
if(OrderType()==OP_BUY)
{
if(Bid>=OrderOpenPrice()+HiddenTrailingStopPips*point && (GlobalVariableGet("TS"+OrderTicket())<Bid-HiddenTrailingStopPips*point || GlobalVariableGet("TS"+OrderTicket())==0))
{
GlobalVariableSet("TS"+OrderTicket(),Bid-HiddenTrailingStopPips*point);
}
}
else
{
if(Ask<=OrderOpenPrice()-HiddenTrailingStopPips*point && (GlobalVariableGet("TS"+OrderTicket())>Ask+HiddenTrailingStopPips*point || GlobalVariableGet("TS"+OrderTicket())==0))
{
GlobalVariableSet("TS"+OrderTicket(),Ask+HiddenTrailingStopPips*point);
}
}
}
}
}
//------------------------------------------------------------------------------
void CloseHiddenTrailingStop()//اغلاق التريلينج ستوب المخقس
{
HiddenTrailingStop();//استدعاء دالة التريلينج استوب المخفي
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY&&GlobalVariableGet("TS"+OrderTicket())!=0)
{
if(Bid<=GlobalVariableGet("TS"+OrderTicket()))
{
bool closeB=OrderClose(OrderTicket(),OrderLots(),Bid,Slippage*P);
GlobalVariableDel("TS"+OrderTicket());
}
}
if(OrderType()==OP_SELL&&GlobalVariableGet("TS"+OrderTicket())!=0)
{
if(Ask>=GlobalVariableGet("TS"+OrderTicket()))
{
bool closeS=OrderClose(OrderTicket(),OrderLots(),Ask,Slippage*P);
GlobalVariableDel("TS"+OrderTicket());
}
}
}
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void HiddenTrailingBalancePercent()//تريلينج استوب مخفى بناء علي نسبة مئوية للربح
{
double ProfitPercent=AccountProfit()/AccountBalance()*100;
if(ProfitPercent>=TrailingPercent && (GlobalVariableGet("TS Percent")<ProfitPercent-TrailingPercent || GlobalVariableGet("TS Percent")==0))
{
GlobalVariableSet("TS Percent",ProfitPercent-TrailingPercent);
}
if(ProfitPercent<=GlobalVariableGet("TS Percent") && GlobalVariableGet("TS Percent")!=0)
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY)
{
bool closeB=OrderClose(OrderTicket(),OrderLots(),Bid,Slippage*P);
}
if(OrderType()==OP_SELL)
{
bool closeS=OrderClose(OrderTicket(),OrderLots(),Ask,Slippage*P);
}
}
}
GlobalVariableDel("TS Percent");
}
}
//+------------------------------------------------------------------+
int i=OrdersTotal()-1;
ام يجب ازالة الـ -1
وما هو الفرق لاني اراها مختلفة في بعض الاكسبرتاتآخر تعديل بواسطة rain_man ، 28-01-2020 الساعة 10:38 PM
- 29-01-2020, 06:19 PM #9792
تفضل هذا مثال
كود PHP:double TotalLoss()
{
double prevOrderProfit;
double totalLoss;
for(int i=0;i<OrdersHistoryTotal();i++)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol())
{
if(OrderProfit()<0&&prevOrderProfit<0)
{
totalLoss+=(OrderProfit()+prevOrderProfit);
prevOrderProfit=0;
}
else
prevOrderProfit=OrderProfit();
}
}
}
- 29-01-2020, 06:23 PM #9793
عدد الصفقات يبدأ من 0 حتى مجموع الصفقات -1
فمثلا لو كان عدد الصفقات المفتوحه 5 صفقات فرقم الإندكس لها سيكون 0, 1, 2, 3, 4 لذلك نستخدم مجموع الصفقات -1
هذه الدالة نفس فكرة الtrailing step يمكنك مراجعتها
كود PHP:void MoveTrailingStop()
{
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
bool select=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if(OrderType()<=OP_SELL && OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
{
if(OrderType()==OP_BUY)
{
if(TrailingStop>0 && NormalizeDouble(Ask-TrailingStep*point,Digits)>NormalizeDouble(OrderOpenPrice()+TrailingStop*point,Digits))
{
if((NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(Bid-TrailingStop*point,Digits)) || (OrderStopLoss()==0))
{
bool modify=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-TrailingStop*point,Digits),OrderTakeProfit(),0,Blue);
}
}
}
else
{
if(TrailingStop>0 && NormalizeDouble(Bid+TrailingStep*point,Digits)<NormalizeDouble(OrderOpenPrice()-TrailingStop*point,Digits))
{
if((NormalizeDouble(OrderStopLoss(),Digits)>(NormalizeDouble(Ask+TrailingStop*point,Digits))) || (OrderStopLoss()==0))
{
modify=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+TrailingStop*point,Digits),OrderTakeProfit(),0,Red);
}
}
}
}
}
}
- 29-01-2020, 09:05 PM #9794
هذا هو الكود بعد التعديل ياريت تراجعه لو فيه اخطاء
كود PHP:void HiddenTrailingStop()//حساب التريلينج استوب المخفي
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol() && OrderType()<=OP_SELL && HiddenTrailingStopPips>0)
{
if(OrderType()==OP_BUY)
{
if(HiddenTrailingStopPips>0&&NormalizeDouble(Bid-HiddenTrailingStep*point,Digits)>NormalizeDouble(OrderOpenPrice()+HiddenTrailingStopPips*point,Digits) && (GlobalVariableGet("TS"+OrderTicket())<Bid-HiddenTrailingStopPips*point || GlobalVariableGet("TS"+OrderTicket())==0))
{
if((NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(Bid-HiddenTrailingStopPips*point,Digits))||(OrderStopLoss()==0))
{
GlobalVariableSet("TS"+OrderTicket(),Bid-HiddenTrailingStopPips*point);
}
}
}
else
{
if(HiddenTrailingStopPips>0&&NormalizeDouble(Ask+HiddenTrailingStep*point,Digits)< NormalizeDouble(OrderOpenPrice()-HiddenTrailingStopPips*point,Digits) && (GlobalVariableGet("TS"+OrderTicket())>Ask+HiddenTrailingStopPips*point || GlobalVariableGet("TS"+OrderTicket())==0))
{
if((NormalizeDouble(OrderStopLoss(),Digits)>(NormalizeDouble(Ask+HiddenTrailingStopPips*point,Digits)))||(OrderStopLoss()==0))
{
GlobalVariableSet("TS"+OrderTicket(),Ask+HiddenTrailingStopPips*point);
}
}
}
}
}
}
آخر تعديل بواسطة rain_man ، 29-01-2020 الساعة 09:09 PM
- 31-01-2020, 06:06 PM #9795
السلام عليكم
بارك الله فيك أستاذ أسامة
لم أستوعب دور bool select قبل Orderselect
يعني من البداية :
1-الدالة تعمل كلما زادت صفقة في الهستري
2- تختار أخر صفقة أغلقت
3-تراقب الزوج
4-تدحدد الشرط إذا كانت أخر صفقة خاسرة وقيمة المتغير prevOrderProfit خسرة أيضا
5-إذا تحقق الشرط 4 يتم حساب مجموع القيمة لأخر صفقة + قيمة المتغير prevOrderProfit
6-إذا لم يتحقق الشرط 5 يأخذ المتغير prevOrderProfit قيمة أخر صفقة أغلقت
هذا هو فهمي للدالة لاكن لم أفهم دور bool ممكن تشرح لي من فصلك ؟
المواضيع المتشابهه
-
موضوع مخصص للاكسبيرتات اللتي يستخدمها الاعضاء على الحقيقي,,عندك اكسبيرت ممتاز ضعه هنا
By محمد معمو in forum برمجة المؤشرات واكسبرتات التداول - Experts Advisor EAمشاركات: 11آخر مشاركة: 15-12-2023, 02:03 PM -
عااااااااااااجل ( موضوع مخصص للفرص الفورية)!!!
By عاشق الذبذبـة in forum توقعات وتوصيات سوق العملاتمشاركات: 280آخر مشاركة: 27-08-2009, 10:30 PM