- 注册时间
- 2013-9-23
- 在线时间
- 519 小时
- 最后登录
- 2022-4-4
- 阅读权限
- 200
管理员
MT4软件工程师
- 积分
- 6521
- 帖子
- 2771
- 主题
- 2761
|
MT4智能交易编程示例 Exposure指标- #property copyright "路路发智能交易研发中心"
- #property link "http://www.ea668.com"
- #property strict
- #property indicator_separate_window
- #property indicator_buffers 1
- #property indicator_minimum 0.0
- #property indicator_maximum 0.1
- #define SYMBOLS_MAX 1024
- #define DEALS 0
- #define BUY_LOTS 1
- #define BUY_PRICE 2
- #define SELL_LOTS 3
- #define SELL_PRICE 4
- #define NET_LOTS 5
- #define PROFIT 6
- input color InpColor=LightSeaGreen; // Text color
- string ExtName="Exposure";
- string ExtSymbols[SYMBOLS_MAX];
- int ExtSymbolsTotal=0;
- double ExtSymbolsSummaries[SYMBOLS_MAX][7];
- int ExtLines=-1;
- string ExtCols[8]={"Symbol",
- "Deals",
- "Buy lots",
- "Buy price",
- "Sell lots",
- "Sell price",
- "Net lots",
- "Profit"};
- int ExtShifts[8]={ 10, 80, 130, 180, 260, 310, 390, 460 };
- int ExtVertShift=14;
- double ExtMapBuffer[];
- //+------------------------------------------------------------------+
- //| Custom indicator initialization function |
- //+------------------------------------------------------------------+
- void OnInit()
- {
- IndicatorShortName(ExtName);
- SetIndexBuffer(0,ExtMapBuffer);
- SetIndexStyle(0,DRAW_NONE);
- IndicatorDigits(0);
- SetIndexEmptyValue(0,0.0);
- }
- //+------------------------------------------------------------------+
- //| |
- //+------------------------------------------------------------------+
- void OnDeinit(const int reason)
- {
- int windex=WindowFind(ExtName);
- if(windex>0)
- ObjectsDeleteAll(windex);
- }
- //+------------------------------------------------------------------+
- //| Custom indicator iteration function |
- //+------------------------------------------------------------------+
- int OnCalculate(const int rates_total,
- const int prev_calculated,
- const datetime &time[],
- const double &open[],
- const double &high[],
- const double &low[],
- const double &close[],
- const long& tick_volume[],
- const long& volume[],
- const int& spread[])
- {
- string name;
- int i,col,line,windex=WindowFind(ExtName);
- //----
- if(windex<0)
- return(rates_total);
- //---- header line
- if(ExtLines<0)
- {
- for(col=0; col<8; col++)
- {
- name="Head_"+string(col);
- if(ObjectCreate(name,OBJ_LABEL,windex,0,0))
- {
- ObjectSet(name,OBJPROP_XDISTANCE,ExtShifts[col]);
- ObjectSet(name,OBJPROP_YDISTANCE,ExtVertShift);
- ObjectSetText(name,ExtCols[col],9,"Arial",InpColor);
- }
- }
- ExtLines=0;
- }
- //----
- ArrayInitialize(ExtSymbolsSummaries,0.0);
- int total=Analyze();
- if(total>0)
- {
- line=0;
- for(i=0; i<ExtSymbolsTotal; i++)
- {
- if(ExtSymbolsSummaries[i][DEALS]<=0) continue;
- line++;
- //---- add line
- if(line>ExtLines)
- {
- int y_dist=ExtVertShift*(line+1)+1;
- for(col=0; col<8; col++)
- {
- name="Line_"+string(line)+"_"+string(col);
- if(ObjectCreate(name,OBJ_LABEL,windex,0,0))
- {
- ObjectSet(name,OBJPROP_XDISTANCE,ExtShifts[col]);
- ObjectSet(name,OBJPROP_YDISTANCE,y_dist);
- }
- }
- ExtLines++;
- }
- //---- set line
- int digits=(int)MarketInfo(ExtSymbols[i],MODE_DIGITS);
- double buy_lots=ExtSymbolsSummaries[i][BUY_LOTS];
- double sell_lots=ExtSymbolsSummaries[i][SELL_LOTS];
- double buy_price=0.0;
- double sell_price=0.0;
- if(buy_lots!=0) buy_price=ExtSymbolsSummaries[i][BUY_PRICE]/buy_lots;
- if(sell_lots!=0) sell_price=ExtSymbolsSummaries[i][SELL_PRICE]/sell_lots;
- name="Line_"+string(line)+"_0";
- ObjectSetText(name,ExtSymbols[i],9,"Arial",InpColor);
- name="Line_"+string(line)+"_1";
- ObjectSetText(name,DoubleToStr(ExtSymbolsSummaries[i][DEALS],0),9,"Arial",InpColor);
- name="Line_"+string(line)+"_2";
- ObjectSetText(name,DoubleToStr(buy_lots,2),9,"Arial",InpColor);
- name="Line_"+string(line)+"_3";
- ObjectSetText(name,DoubleToStr(buy_price,digits),9,"Arial",InpColor);
- name="Line_"+string(line)+"_4";
- ObjectSetText(name,DoubleToStr(sell_lots,2),9,"Arial",InpColor);
- name="Line_"+string(line)+"_5";
- ObjectSetText(name,DoubleToStr(sell_price,digits),9,"Arial",InpColor);
- name="Line_"+string(line)+"_6";
- ObjectSetText(name,DoubleToStr(buy_lots-sell_lots,2),9,"Arial",InpColor);
- name="Line_"+string(line)+"_7";
- ObjectSetText(name,DoubleToStr(ExtSymbolsSummaries[i][PROFIT],2),9,"Arial",InpColor);
- }
- }
- //---- remove lines
- if(total<ExtLines)
- {
- for(line=ExtLines; line>total; line--)
- {
- name="Line_"+string(line)+"_0";
- ObjectSetText(name,"");
- name="Line_"+string(line)+"_1";
- ObjectSetText(name,"");
- name="Line_"+string(line)+"_2";
- ObjectSetText(name,"");
- name="Line_"+string(line)+"_3";
- ObjectSetText(name,"");
- name="Line_"+string(line)+"_4";
- ObjectSetText(name,"");
- name="Line_"+string(line)+"_5";
- ObjectSetText(name,"");
- name="Line_"+string(line)+"_6";
- ObjectSetText(name,"");
- name="Line_"+string(line)+"_7";
- ObjectSetText(name,"");
- }
- }
- //---- to avoid minimum==maximum
- ExtMapBuffer[Bars-1]=-1;
- //----
- return(rates_total);
- }
- //+------------------------------------------------------------------+
- //| |
- //+------------------------------------------------------------------+
- int Analyze()
- {
- double profit;
- int i,index,type,total=OrdersTotal();
- //----
- for(i=0; i<total; i++)
- {
- if(!OrderSelect(i,SELECT_BY_POS)) continue;
- type=OrderType();
- if(type!=OP_BUY && type!=OP_SELL) continue;
- index=SymbolsIndex(OrderSymbol());
- if(index<0 || index>=SYMBOLS_MAX) continue;
- //----
- ExtSymbolsSummaries[index][DEALS]++;
- profit=OrderProfit()+OrderCommission()+OrderSwap();
- ExtSymbolsSummaries[index][PROFIT]+=profit;
- if(type==OP_BUY)
- {
- ExtSymbolsSummaries[index][BUY_LOTS]+=OrderLots();
- ExtSymbolsSummaries[index][BUY_PRICE]+=OrderOpenPrice()*OrderLots();
- }
- else
- {
- ExtSymbolsSummaries[index][SELL_LOTS]+=OrderLots();
- ExtSymbolsSummaries[index][SELL_PRICE]+=OrderOpenPrice()*OrderLots();
- }
- }
- //----
- total=0;
- for(i=0; i<ExtSymbolsTotal; i++)
- {
- if(ExtSymbolsSummaries[i][DEALS]>0) total++;
- }
- //----
- return(total);
- }
- //+------------------------------------------------------------------+
- //| |
- //+------------------------------------------------------------------+
- int SymbolsIndex(string SymbolName)
- {
- bool found=false;
- int i;
- //----
- for(i=0; i<ExtSymbolsTotal; i++)
- {
- if(SymbolName==ExtSymbols[i])
- {
- found=true;
- break;
- }
- }
- //----
- if(found)
- return(i);
- if(ExtSymbolsTotal>=SYMBOLS_MAX)
- return(-1);
- //----
- i=ExtSymbolsTotal;
- ExtSymbolsTotal++;
- ExtSymbols[i]=SymbolName;
- ExtSymbolsSummaries[i][DEALS]=0;
- ExtSymbolsSummaries[i][BUY_LOTS]=0;
- ExtSymbolsSummaries[i][BUY_PRICE]=0;
- ExtSymbolsSummaries[i][SELL_LOTS]=0;
- ExtSymbolsSummaries[i][SELL_PRICE]=0;
- ExtSymbolsSummaries[i][NET_LOTS]=0;
- ExtSymbolsSummaries[i][PROFIT]=0;
- //----
- return(i);
- }
- //+------------------------------------------------------------------+
复制代码
|
|