Price Data Components
Orders Execution
Indicators Used
Miscellaneous
0
Views
0
Downloads
0
Favorites
Div_MACD
//+------------------------------------------------------------------+
//| Div_MACD.mq4 |
//| KONDOR |
//| forex_@i.ua |
//+------------------------------------------------------------------+
extern double Lots=0.1;
extern int TakeProfit=1000, StopLoss=1000;
int mn=0;
extern int p1=50,p2=100,s=15;
double pair[1000];
string simb[28]={
"EURGBP","EURAUD","EURNZD","EURUSD","EURCAD","EURCHF","EURJPY",
"GBPAUD","GBPNZD","GBPUSD","GBPCAD","GBPCHF","GBPJPY","AUDNZD",
"AUDUSD","AUDCAD","AUDCHF","AUDJPY","NZDUSD","NZDCAD","NZDCHF",
"NZDJPY","USDCAD","USDCHF","USDJPY","CADCHF","CADJPY","CHFJPY"};
datetime old_Time[28]= {
D'2000.01.01 00:00',D'2000.01.01 00:00',D'2000.01.01 00:00',D'2000.01.01 00:00',D'2000.01.01 00:00',D'2000.01.01 00:00',D'2000.01.01 00:00',
D'2000.01.01 00:00',D'2000.01.01 00:00',D'2000.01.01 00:00',D'2000.01.01 00:00',D'2000.01.01 00:00',D'2000.01.01 00:00',D'2000.01.01 00:00',
D'2000.01.01 00:00',D'2000.01.01 00:00',D'2000.01.01 00:00',D'2000.01.01 00:00',D'2000.01.01 00:00',D'2000.01.01 00:00',D'2000.01.01 00:00',
D'2000.01.01 00:00',D'2000.01.01 00:00',D'2000.01.01 00:00',D'2000.01.01 00:00',D'2000.01.01 00:00',D'2000.01.01 00:00',D'2000.01.01 00:00' };
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
//----------------- óñòàíàâëèâàåì âðåìÿ îòêðûòèÿ ïîçèöèé
for (int g=0;g<28;g++) {
if( old_Time[g]<OrderOpenTime_( simb[g])) old_Time[g]=OrderOpenTime_( simb[g]);
}
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
ObjectDelete("Line1");
ObjectDelete("Line2");
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int limit,i;
//---- îñíîâíîé öèêë
bool op[28][2]={false,false,false,false,false,false,false,false,false,false,false,false,false,false,
false,false,false,false,false,false,false,false,false,false,false,false,false,false};
bool cl[28][2]={false,false,false,false,false,false,false,false,false,false,false,false,false,false,
false,false,false,false,false,false,false,false,false,false,false,false,false,false};
for( int g=0;g<28;g++) { //( i=ind;i<ind+1;i++)
if (old_Time[g]==iTime(simb[g],0,0))continue;
int Digit=MarketInfo(simb[g],MODE_DIGITS);
double ask_=MarketInfo(simb[g],MODE_ASK),
bid_=MarketInfo(simb[g],MODE_BID),
pp=MarketInfo(simb[g],MODE_POINT),
sLevel=MarketInfo(simb[g],MODE_STOPLEVEL),
spread=MarketInfo(simb[g],MODE_SPREAD);
int ext1=0, ext2=0,b1=0,b2=0,b3=0,b4=0;
string text="";
for( i = 0; i < 1000; i++) { // çàãîíÿåì èíäèêàòîð â ìàññèâ
pair[i] = macd(simb[g], i); }
if(pair[1]>pair[3] ){ //èíäèêàòîð ðàñòåò, íàõîäèì äâà ìèíèìóìà
if(pair[1]>0 ) {
for(i=0;i<500;i++) {
if(pair[i]<0) { b1=i; break;}
}
for(i=b1;i<b1+500;i++) {
if(pair[i]>0) { b2=i; break;}
}
for(i=b2;i<b2+500;i++) {
if(pair[i]<0) { b3=i; break;}
}
for(i=b3;i<b3+500;i++) {
if(pair[i]>0) { b4=i; break;}
}
} // if(pair[1]>0 ) {
if(pair[1]<0){
b1=0;
for(i=b1;i<b1+500;i++) {
if(pair[i]>0) { b2=i; break;}
}
for(i=b2;i<b2+500;i++) {
if(pair[i]<0) { b3=i; break;}
}
for(i=b3;i<b3+500;i++) {
if(pair[i]>0) { b4=i; break;}
}
} //if(pair[1]<0){
//----------------------------------------------
double min1=100000;
for(i=b1;i<b2;i++) {
if (pair[i]<min1) {min1=pair[i]; ext1=i;}
}
double min2=100000;
for(i=b3;i<b4;i++) {
if (pair[i]<min2) {min2=pair[i]; ext2=i;}
}
if(macd(simb[g],ext2) < macd(simb[g],ext1) &&
summa(simb[g],ext2) > summa(simb[g],ext1) )
{cl[g][1]=true; text=" diver BUY"; } else
if(macd(simb[g],ext2) > macd(simb[g],ext1) &&
summa(simb[g],ext2) < summa(simb[g],ext1) )
{op[g][0]=true; text=" converg BUY"; } else
if(macd(simb[g],ext2) > macd(simb[g],ext1) &&
summa(simb[g],ext2) > summa(simb[g],ext1))
text=" wait SELL"; else
if(macd(simb[g],ext2) < macd(simb[g],ext1) &&
summa(simb[g],ext2) < summa(simb[g],ext1))
text=" TREND BUY";
} //èíäèêàòîð ðàñòåò, íàõîäèì äâà ìèíèìóìà
//=================================================================
if(pair[1]<pair[3] ){ //èíäèêàòîð ïàäàåò, íàõîäèì äâà ìàêñèìóìà
if(pair[1]<0 ){
for(i=0;i<500;i++) {
if(pair[i]>0) { b1=i; break;}
}
for(i=b1;i<b1+500;i++) {
if(pair[i]<0) { b2=i; break;}
}
for(i=b2;i<b2+500;i++) {
if(pair[i]>0) { b3=i; break;}
}
for(i=b3;i<b3+500;i++) {
if(pair[i]<0) { b4=i; break;}
}
} // if(pair[1]<0 ){
if(pair[1]>0){
b1=0;
for(i=b1;i<b1+500;i++) {
if(pair[i]<0) { b2=i; break;}
}
for(i=b2;i<b2+500;i++) {
if(pair[i]>0) { b3=i; break;}
}
for(i=b3;i<b3+500;i++) {
if(pair[i]<0) { b4=i; break;}
}
} // if(pair[1]>0){
//---------------------------------------------- }
double max1=-100000;
for(i=b1;i<b2;i++) {
if (pair[i]>max1) {max1=pair[i]; ext1=i;}
}
double max2=-100000;
for(i=b3;i<b4;i++) {
if (pair[i]>max2) {max2=pair[i]; ext2=i;}
}
if(macd(simb[g],ext2) > macd(simb[g],ext1) &&
summa(simb[g],ext2) < summa(simb[g],ext1) )
{cl[g][0]=true; text=" diver SELL";} else
if(macd(simb[g],ext2) < macd(simb[g],ext1) &&
summa(simb[g],ext2) > summa(simb[g],ext1) )
{op[g][1]=true; text=" converg SELL";} else
if(macd(simb[g],ext2) < macd(simb[g],ext1) &&
summa(simb[g],ext2) < summa(simb[g],ext1))
text=" wait BUY"; else
if(macd(simb[g],ext2) > macd(simb[g],ext1) &&
summa(simb[g],ext2) > summa(simb[g],ext1))
text=" TREND SELL";
} //èíäèêàòîð ïàäàåò, íàõîäèì äâà ìàêñèìóìà
if(simb[g]==Symbol()) { int EXT1=ext1; int EXT2=ext2; string TEXT=text;} // îòîáðàæåíèå íà ãðàôèêå
//Alert(simb[g],text);
if( op[g][0]==true && CalculateOrders(simb[g],OP_BUY)==0 ) {
OrderSend(simb[g],OP_BUY, Lots,ask_,3,bid_-StopLoss*pp,0,text,mn,0, Blue);
old_Time[g]=iTime(simb[g],0,0);
Alert(simb[g], " ",text); }
if( op[g][1]==true && CalculateOrders(simb[g],OP_SELL)==0 ) {
OrderSend(simb[g],OP_SELL,Lots,bid_,3,ask_+StopLoss*pp,0,text,mn,0,DeepPink);
old_Time[g]=iTime(simb[g],0,0);
Alert(simb[g], " ",text); }
} //for( int g=0;g<28;g++)
// Alert("b1 =",b1,"; b2 =",b2," b3 =",b3,"; b4 =",b4, " ext1 =",ext1,"; ext2 =",ext2);
for( i=0;i<OrdersTotal();i++) {
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) continue;
for(int k=0;k<28;k++) {
if(simb[k]==OrderSymbol()) {int s=k; break;}
}
if(OrderType()==OP_BUY) {
if(cl[s][0]==true) { OrderClose(OrderTicket(),OrderLots(),MarketInfo(simb[s],MODE_BID),3,Aqua);}
}
if(OrderType()==OP_SELL) {
if(cl[s][1]==true) { OrderClose(OrderTicket(),OrderLots(),MarketInfo(simb[s],MODE_ASK),3,Pink);}
}
} //for( i=0;i<OrdersTotal();i++)
//=======================================================================================
Create_Tic("Div_MACD",TEXT,100,50);
if(ObjectFind( "Line1")<0 ) {
ObjectCreate("Line1",OBJ_VLINE, 0, Time[EXT1],Close[EXT1]);
ObjectSet("Line1",OBJPROP_COLOR,DeepPink);
ObjectSet("Line1",OBJPROP_WIDTH,2);
WindowRedraw(); }
if(ObjectFind( "Line1")>=0) {
ObjectMove("Line1",0, Time[EXT1],Close[EXT1]);
WindowRedraw(); }
if(ObjectFind( "Line2")<0 ) {
ObjectCreate("Line2",OBJ_VLINE, 0, Time[EXT2],Close[EXT2]);
ObjectSet("Line2",OBJPROP_COLOR,DeepPink);
ObjectSet("Line2",OBJPROP_WIDTH,2);
WindowRedraw(); }
if(ObjectFind( "Line2")>=0) {
ObjectMove("Line2",0, Time[EXT2],Close[EXT2]);
WindowRedraw(); }
//----
return(0);
}
//+------------------------------------------------------------------+
double macd(string simbol,int i){
double res=iOsMA(simbol,0,p1,p2,s,PRICE_MEDIAN,i)/iClose(simbol,0,i)*10000;
return(res); }
double summa(string simbol,int i){
double res=iHigh(simbol,0,i)+iLow(simbol,0,i);
return(res);}
//------------------------------------------------------------------
int CalculateOrders(string simbol,int type) { int count=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==simbol )//&& OrderMagicNumber()==mn)
{
if(OrderType()==type) count++;
}
}
return(count);
}
//------------------------------------------------------------------
datetime OrderOpenTime_(string simbol)
{
datetime Time_=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==simbol )
{
if(OrderOpenTime()>Time_) Time_=OrderOpenTime();
}
}
return(Time_);
}
//+------------------------------------------------------------------+
int Create_Tic(string name,string text,int x,int y)
{
ObjectDelete(name);
ObjectCreate(name,OBJ_LABEL, 0, 0,0);
ObjectSetText(name, text, 12, "Tahoma Narrow", Orange);
ObjectSet(name, OBJPROP_CORNER, 3);
ObjectSet(name, OBJPROP_XDISTANCE, x);
ObjectSet(name,OBJPROP_YDISTANCE,y);
WindowRedraw();
return;
}
Comments
Markdown Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---