#property copyright ""
#property link ""
#property strict
#property indicator_separate_window
#property indicator_buffers 7
#property indicator_color1 Red
#property indicator_color2 DeepSkyBlue
#property indicator_color3 Gold
#property indicator_color4 Lime
#property indicator_color5 Green
#property indicator_color6 Magenta
#property indicator_color7 Brown
#property indicator_width1 3
#property indicator_width2 2
#property indicator_width3 3
#property indicator_width4 3
#property indicator_width5 3
#property indicator_width6 2
extern int NumberOfBars = 500;
extern string Note = "0 means Display all bars";
extern int MAPeriod = 100;
extern int LookBack = 20;
extern string _1_LineLevels = "Настройки отображения уровней";
extern int MaxOfBars = 100; // Максимум баров для отрисовки
extern int MinCandleBody = 21; // Минимальная величина тела свечи
extern color BullLineColore = Blue; // Цвет линий красного столбика
extern color BearLineColore = Red; // Цвет линий зеленого столбика
double red[],blue[],yellow[],green[],white[],magenta[],v4[];
bool mail,push;
int send=0;
double mincandle=MinCandleBody*MarketInfo(Symbol(),MODE_POINT);
//+----------------------------------------------------------------------------+
//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Версия : 30.03.2008 |
//| Описание : Установка объекта OBJ_HLINE горизонтальная линия |
//+----------------------------------------------------------------------------+
//| Параметры: |
//| cl - цвет линии |
//| nm - наименование ("" - время открытия текущего бара) |
//| p1 - ценовой уровень (0 - Bid) |
//| st - стиль линии (0 - простая линия) |
//| wd - ширина линии (0 - по умолчанию) |
//+----------------------------------------------------------------------------+
void SetHLine(color cl, string nm="", double p1=0, int st=0, int wd=1)
{
if (nm=="") nm=DoubleToStr(Time[0], 0);
if (p1<=0) p1=Bid;
if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_HLINE, 0, 0,0);
ObjectSet(nm, OBJPROP_PRICE1, p1);
ObjectSet(nm, OBJPROP_COLOR , cl);
ObjectSet(nm, OBJPROP_STYLE , st);
ObjectSet(nm, OBJPROP_WIDTH , wd);
}
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
SetIndexBuffer(0,red);
SetIndexStyle(0,DRAW_HISTOGRAM);
SetIndexLabel(0,"Climax High ");
SetIndexBuffer(1,blue);
SetIndexStyle(1,DRAW_HISTOGRAM);
SetIndexLabel(1,"Neutral");
SetIndexBuffer(2,yellow);
SetIndexStyle(2,DRAW_HISTOGRAM);
SetIndexLabel(2,"Low ");
SetIndexBuffer(3,green);
SetIndexStyle(3,DRAW_HISTOGRAM);
SetIndexLabel(3,"HighChurn ");
SetIndexBuffer(4,white);
SetIndexStyle(4,DRAW_HISTOGRAM);
SetIndexLabel(4,"Climax Low ");
SetIndexBuffer(5,magenta);
SetIndexStyle(5,DRAW_HISTOGRAM);
SetIndexLabel(5,"ClimaxChurn ");
SetIndexBuffer(6,v4);
SetIndexStyle(6,DRAW_LINE,0,2);
SetIndexLabel(6,"Average("+IntegerToString(MAPeriod)+")");
IndicatorShortName("Better Volume 1.4" );
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
double VolLowest,Range,Value2,Value3,HiValue2,HiValue3,LoValue3,tempv2,tempv3,tempv;
int limit;
int counted_bars=IndicatorCounted();
//---- last counted bar will be recounted
if(counted_bars>0) counted_bars--;
if ( NumberOfBars == 0 )
NumberOfBars = Bars-counted_bars;
limit=NumberOfBars; //Bars-counted_bars;
for(int i=0; i<limit; i++)
{
red[i] = 0; blue[i] =(double) Volume[i]; yellow[i] = 0; green[i] = 0; white[i] = 0; magenta[i] = 0;
Value2=0;Value3=0;HiValue2=0;HiValue3=0;LoValue3=99999999;tempv2=0;tempv3=0;tempv=0;
// -- определяем самый низкий объем за 20 свечек и рисуем столбик
VolLowest =(double) Volume[iLowest(NULL,0,MODE_VOLUME,20,i)];
if (Volume[i] == VolLowest)
{
yellow[i] = NormalizeDouble(Volume[i],0);
blue[i]=0;
}
// -- определяем волатильность
Range = (High[i]-Low[i]);
Value2 = Volume[i]*Range;
if ( Range != 0 )
Value3 = Volume[i]/Range;
for ( int n=i;n<i+MAPeriod;n++ )
{
tempv= Volume[n] + tempv;
}
v4[i] = NormalizeDouble(tempv/MAPeriod,0);
for (int n=i;n<i+LookBack;n++)
{
tempv2 = Volume[n]*((High[n]-Low[n]));
if ( tempv2 >= HiValue2 )
HiValue2 = tempv2;
if ( Volume[n]*((High[n]-Low[n])) != 0 )
{
tempv3 = Volume[n] / ((High[n]-Low[n]));
if ( tempv3 > HiValue3 )
HiValue3 = tempv3;
if ( tempv3 < LoValue3 )
LoValue3 = tempv3;
}
}
if ( Value2 == HiValue2 && Close[i] > (High[i] + Low[i]) / 2 )
{
red[i] = NormalizeDouble(Volume[i],0);
// Alert("Столбик красный!");
// push=SendNotification("Столбик красный!");
// mail=SendMail("Сообщение из терминала MetaTrader 4 ", "Столбик красный!");
// Sleep(1000);
// send++;
blue[i]=0;
yellow[i]=0;
}
if ( Value3 == HiValue3 )
{
green[i] = NormalizeDouble(Volume[i],0);
blue[i] =0;
yellow[i]=0;
red[i]=0;
}
if ( Value2 == HiValue2 && Value3 == HiValue3 )
{
magenta[i] = NormalizeDouble(Volume[i],0);
blue[i]=0;
red[i]=0;
green[i]=0;
yellow[i]=0;
}
if ( Value2 == HiValue2 && Close[i] <= (High[i] + Low[i]) / 2 )
{
white[i] = NormalizeDouble(Volume[i],0);
// Alert("Столбик зеленый!");
// push=SendNotification("Столбик зеленый!");
// mail=SendMail("Сообщение из терминала MetaTrader 4 ", "Столбик зеленый!");
// Sleep(1000);
// send++;
magenta[i]=0;
blue[i]=0;
red[i]=0;
green[i]=0;
yellow[i]=0;
}
//------------------------------Отрисовка уровней-----------------------------//
if(red[i]!=0 && Open[i]<Close[i] && (Close[i]-Open[i])>mincandle)
{
//ObjectsDeleteAll();
SetHLine(BullLineColore,"RedOpen "+TimeToString(Time[i],TIME_DATE),Open[i],0,1);
SetHLine(BullLineColore,"RedClose "+TimeToString(Time[i],TIME_DATE),Close[i],0,1);
}
if(white[i]!=0 && Open[i]>Close[i] && (Open[i]-Close[i])>mincandle)
{
//ObjectsDeleteAll();
SetHLine(BearLineColore,"GreenOpen "+TimeToString(Time[i],TIME_DATE),Open[i],0,1);
SetHLine(BearLineColore,"GreenClose "+TimeToString(Time[i],TIME_DATE),Close[i],0,1);
}
}
return(0);
}
//+------------------------------------------------------------------+
<code>extern string _1_LineLevels = "Настройки отображения уровней" extern int MaxOfBars = 100; // Максимум баров для отрисовки extern int MinCandleBody = 21; // Минимальная величина тела свечи extern color BullLineColore = Blue; // Цвет линий красного столбика extern color BearLineColore = Red; // Цвет линий зеленого столбика extern string _P_WhereOutput = "---------- Куда выводить"; extern bool UseAlert = True; // Использовать диалоговое окно extern bool UseComment = False; // Выводить комментарий extern bool UsePrint = False; // Записывать в журнал extern bool UseSendMail = False; // Посылать электронное письмо extern bool UseSendPush = False; // Посылать Push-уведомление на мобильные терминалы extern bool UseSound = True; // Использовать звук extern string sotFileName = "news.wav"; // Наименование звукового файла extern int AlertInterval = 60; // Интервал подачи сигнала</code>
#property link "http://www.forex-instruments.info"
//+------------------------------------------------------------------+
//| ASCtrend.mq4 |
//| Copyright © 2005, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Yellow
#property indicator_color2 DeepSkyBlue
extern int RISK = 3;
extern int AllBars = 250;
int up = 0, dn = 0;
double val1buffer[];
double val2buffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
SetIndexStyle(0,DRAW_ARROW,EMPTY,2,clrYellow);
SetIndexArrow(0,108);
SetIndexBuffer(0, val1buffer);
SetIndexStyle(1,DRAW_ARROW,EMPTY,2,clrDeepSkyBlue);
SetIndexArrow(1,108);
SetIndexBuffer(1, val2buffer);
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
// int counted_bars=IndicatorCounted();
int start()
{
double value2;
double value3;
double value10 = 10;
double value11;
double x1 = 70;
double x2 = 30;
int TrueCount;
int counter;
int MRO1;
int MRO2;
int i1;
double Range;
double AvgRange;
double val1;
double val2;
double Table_value2[500][2];
int counted_bars = IndicatorCounted();
value10 = 3 + RISK * 2;
x1 = 67 + RISK;
x2 = 33 - RISK;
value11 = value10;
//----------------------------
if(counted_bars < 0) return (-1);
if(counted_bars > 0) counted_bars--; //last bar recounted
int i;
int shift = Bars - counted_bars -1;
if (shift > AllBars) shift = AllBars;
if (shift < AllBars) shift = AllBars;
for(i = shift; i > 0; i--)
{
counter = i;
Range = 0;
AvgRange = 0;
for (counter = i; counter <= i + 9; counter++)
{
AvgRange = AvgRange + MathAbs( High[counter] - Low[counter] );
}
Range = AvgRange /10;
counter = i;
TrueCount = 0;
while ( counter < i+9 && TrueCount < 1 )
{
if (MathAbs(Open[counter] - Close[counter + 1]) >= Range*2.0 )
TrueCount++;
counter++;
}
if (TrueCount >= 1)
MRO1 = counter ;
else
MRO1 = -1;
counter = i;
TrueCount = 0;
while (counter<i+6 && TrueCount<1)
{
if (MathAbs(Close[counter + 3] - Close[counter]) >= Range*4.6)
{
TrueCount++;
}
counter++;
}
if(TrueCount >= 1)
MRO2 = counter;
else
MRO2 = -1;
if (MRO1 > -1)
value11 = 3;
else
value11 = value10;
if (MRO2 > -1)
value11 = 4;
else
value11 = value10;
value2 = 100 - MathAbs(iWPR(NULL,0,value11,i));
Table_value2[i][0] = i;
Table_value2[i][1] = value2;
val1 = 0;
val2 = 0;
value3 = 0;
//------------------- val1
if (value2<x2 ) // x2 = 30
{
i1=1;
while (Table_value2[i+i1][1]>=x2 && Table_value2[i+i1][1]<=x1)
{
i1++;
}
if (Table_value2[i+i1][1]>x1)
{
value3=High[i]+Range*0.5;
val1=value3;
}
}
//------------------- val2
if ( value2 > x1) // x1 = 70
{
i1 = 1;
while ( Table_value2[i+i1][1] >= x2 && Table_value2[i+i1][1] <= x1)
{
i1++;
}
if (Table_value2[i+i1][1] < x2)
{
value3 = Low[i] - Range * 0.5;
val2 = value3;
}
}
if (val2!= 0 && up == 0 )
{
val1buffer[i] = val2 - 1 * Point;
up=1;
dn=0;
if(shift <= 2)
{
Alert ( Symbol(), " ", Period(), "M Asctrend BUY ",Ask);
}
}
if (val1 !=0 && dn == 0)
{
val2buffer [i] = val1 + 1 * Point;
dn = 1;
up = 0;
if(shift <= 2)
{
Alert (Symbol(), " ", Period(), "M Asctrend SELL ",Bid);
}
}
}
return (0);
}
<code>//--------------------------------------------------- Обработка изменения баланса if(CurrentAccountBalance!=AccountBalance()) { CurrentAccountBalance=AccountBalance(); if((BuyOrdersTotal()!=0 && BuyStopOrdersTotal()!=1) || (BuyOrdersTotal()!=1 && BuyStopOrdersTotal()!=0)) { tp=BuyOrderLossLess()+TPLossLess*MarketInfo(EASymbol,MODE_POINT);//TakeProfit равен безубыток плюс желаемое количество пунктов SetBuyOrderTakeProfit(tp); } if((SellOrdersTotal()!=0 && SellStopOrdersTotal()!=1) || (SellOrdersTotal()!=1 && SellStopOrdersTotal()!=0)) { tp=SellOrderLossLess()-TPLossLess*MarketInfo(EASymbol,MODE_POINT);//TakeProfit равен безубыток плюс желаемое количество пунктов SetSellOrderTakeProfit(tp); } }</code>
//--------------------------------------------------------------------- Для покупки
double ASCBuy=iCustom(Symbol(),0,"ASCtrend",1,1);
f_up=iFractals(EASymbol,EATimeFrame,MODE_UPPER,3);
if(f_up>0 && ASCBuy<2) //---Если открылся фрактал
{
if(BuyOrdersTotal()>0 || BuyStopOrdersTotal()>0) //---Если есть открытые/отложенные орера на покупку
{
for(i=0;i<OrdersTotal();i++) //---Обрабатываем все открытые/отложенные ордера на покупку
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderMagicNumber()==Magic) //---Выбираем ордер
{
if(OrderType()==OP_BUY && BuyStopOrdersTotal()==0 && BuyOrdersTotal()<=MaxOpenOrders-1) //---Если ордер открыт и нет отложек
{
if(LastBuyOrderOpenPrice()>(f_up+OrderDistance*MarketInfo(EASymbol,MODE_POINT))) //---Проверяем расстояние от цены последнего ордера до фрактала
{
if(MarketInfo(EASymbol,MODE_ASK)<(f_up-PriceDistance*MarketInfo(EASymbol,MODE_POINT))) //---Проверяем расстояние от цены до фрактала
{
if(Martin) lot=NormalizeDouble(LastBuyOrderLot()*MP,2);
else if(MM>0) lot=MMLot(); else lot=Lot; //---Рассчитываем lot
if(SetBuyStop(f_up,lot,0))
{
tp=BuyOrderLossLess();
if(tp==f_up) tp=NormalizeDouble(f_up+TPb*MarketInfo(EASymbol,MODE_POINT),MarketInfo(EASymbol,MODE_DIGITS)); else tp=tp+TPLossLess*MarketInfo(EASymbol,MODE_POINT);
SetBuyOrderTakeProfit(tp);
break;
}
}
}
}
if(OrderType()==OP_BUYSTOP) //---Если отложка не открылась
{
if(f_up>(MarketInfo(EASymbol,MODE_ASK)+PriceDistance*MarketInfo(EASymbol,MODE_POINT)) && f_up<(OrderOpenPrice()+OrderDistance*MarketInfo(EASymbol,MODE_POINT))) //---Проверка расстояния от цены до фрактала и между ордерами
{
if(OrderModify(OrderTicket(),f_up,OrderStopLoss(),0,0))
{
tp=BuyOrderLossLess();
if(tp==f_up) tp=NormalizeDouble(f_up+TPb*MarketInfo(EASymbol,MODE_POINT),MarketInfo(EASymbol,MODE_DIGITS)); else tp=tp+TPLossLess*MarketInfo(EASymbol,MODE_POINT);
SetBuyOrderTakeProfit(tp);
}
else Print("BUYSTOP OrderModify error #",GetLastError());
}
}
}
}
}
if(BuyOrdersTotal()==0 && BuyStopOrdersTotal()==0) //---Если нет открытых/отложенных ордеров
{
if(MarketInfo(EASymbol,MODE_ASK)<(f_up-PriceDistance*MarketInfo(EASymbol,MODE_POINT)))
{
if(MM>0) lot=MMLot(); else lot=Lot;
tp=NormalizeDouble(f_up+TPb*MarketInfo(EASymbol,MODE_POINT),MarketInfo(EASymbol,MODE_DIGITS));
if(SetBuyStop(f_up,lot,0))
{
SetBuyOrderTakeProfit(tp);
}
}
}
}
Andrju81