Так логика кроется как раз вся и полньстью в этом коде который написан на языке Pine.
Что то похожее если делать, то думаю не стоит — потому что этих индикаторов уровней целая куча и все они что то похожее.
Нужно именно этот переделать под мт4
//@version=4
study("Levels High Low", shorttitle="Levels High Low", overlay=true, max_bars_back = 10, max_lines_count = 10, max_labels_count = 10)
lenH = input(title="Length High", type=input.integer, defval=20, minval=1)
lenL = input(title="Length Low", type=input.integer, defval=20, minval=1)
var high_label = array.new_label()
var low_label = array.new_label()
var high_array_lines = array.new_line()
var low_array_lines = array.new_line()
var high_line = close
var low_line = close
fun(src, len, isHigh, _style, _yloc, _color, array_label, array_lines) =>
p = nz(src[len])
isFound = true
for i = 0 to len - 1
if isHigh and src[i] > p
isFound := false
if not isHigh and src[i] < p
isFound := false
for i = len + 1 to 2 * len
if isHigh and src[i] >= p
isFound := false
if not isHigh and src[i] <= p
isFound := false
if isFound
array.push(array_label, label.new(bar_index[len], p, tostring(p), style=_style, yloc=_yloc, color=_color))
array.push(array_lines, line.new(bar_index[len], p, bar_index, p, color=_color, extend=extend.right))
if array.size(array_label) > 1
for i = 1 to array.size(array_label) - 1
if label.get_y(array.get(array_label, array.size(array_label) - 1)) > label.get_y(array.get(array_label, i - 1)) and src == high
label.delete(array.get(array_label, i - 1))
line.delete(array.get(array_lines, i - 1))
if label.get_y(array.get(array_label, array.size(array_label) - 1)) < label.get_y(array.get(array_label, i - 1)) and src == low
label.delete(array.get(array_label, i - 1))
line.delete(array.get(array_lines, i - 1))
if array.size(array_label) > 1
if label.get_y(array.get(array_label, array.size(array_label) - 1)) < high and src == high
label.delete(array.get(array_label, array.size(array_label) - 1))
line.delete(array.get(array_lines, array.size(array_label) - 1))
if label.get_y(array.get(array_label, array.size(array_label) - 1)) > low and src == low
label.delete(array.get(array_label, array.size(array_label) - 1))
line.delete(array.get(array_lines, array.size(array_label) - 1))
fun(high, lenH, true, label.style_label_down, yloc.abovebar, color.rgb(12, 12, 12), high_label, high_array_lines)
fun(low, lenL, false, label.style_label_up, yloc.belowbar, color.red, low_label, low_array_lines)
//+------------------------------------------------------------------+
//| Точтонужно.mq4 |
//+------------------------------------------------------------------+
#property copyright ""
#property link ""
//+------------------------------------------------------------------+
// задание лота - смещением соответствующих цифр (результирующий лот - это сумма смещённых цифр)
// установка нового лота - смещением "строки лота"
// открытие ордера Buy - установкой "стрелки вверх" или "палец вверх", Sell - "стрелки вниз" или "палец вниз"
// закрытие ордеров и удаление SL, TP и отложенных - перекрытием соответствующих линий прямоугольником
// установка SL и TP с помощью трендовой линии
// трейлинг-стоп и шаг трейлинг-стопа - с помощью цифр (по методу установки лота)
// удаление трейлинг-стопа - установкой его в 0 или удалением
// установка отложенных ордеров с помощью горизонтальных линий и соотв. слов: Buy или Sell
// сдвиг отложенного ордера - установкой и смещением ценовой метки
//+------------------------------------------------------------------+
#property version "1.00"
#property strict
//+------------------------------------------------------------------+
extern double Lot = 0.1;
extern string s1________ = "--------------------------------------";
extern int Font = 10;
extern int Y_0 = 0;
extern int Step_Y = 15;
extern int Shift_Y = 10;
extern string s2________ = "--------------------------------------";
extern int Magic = 1423;
extern int Slippage = 5;
extern string pref = "TR_";
extern string s3________ = "--------------------------------------";
extern color col_Buy_Sell= clrRed;
//+------------------------------------------------------------------+
int kol_ord_BuyLimit, kol_ord_SellLimit;
//+------------------------------------------------------------------+
int OnInit()
{
out_str_Sell(20, Y_0+Step_Y*12+Shift_Y, col_Buy_Sell);
out_str_Buy (70, Y_0+Step_Y*12+Shift_Y, col_Buy_Sell);
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
remove_objects(pref);
}
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
void OnTick()
{
//.....................................
// открыть отложенный ордер
double pr=Find_Horiz_Line();
if (pr>0)
{
if (!opred_Buy_otl(70,Y_0+Step_Y*12+Shift_Y,pr,Lot))
opred_Sell_otl(20,Y_0+Step_Y*12+Shift_Y,pr,Lot);
}
else
{
out_str_Sell(20, Y_0+Step_Y*12+Shift_Y, col_Buy_Sell);
out_str_Buy (70, Y_0+Step_Y*12+Shift_Y, col_Buy_Sell);
}
}
//---------------------------------
bool opred_Buy_otl(int X, int Y, double pr, double lot)
{
bool out=false;
if (sdvig_str("Buy",X,Y))
{
out=true;
out_str_Buy(X,Y,col_Buy_Sell);
if (vozvrat_str("Buy",X,Y))
{
out_str_Buy(X,Y,col_Buy_Sell);
if (ust_Buy_otl(pr,Lot))Del_Horiz_Line();
}
}
return(out);
}
//-------------------------------------
bool opred_Sell_otl(int X, int Y, double pr, double lot)
{
bool out=false;
if (sdvig_str("Sell",X,Y))
{
out=true;
out_str_Sell(X,Y, col_Buy_Sell);
if (vozvrat_str("Sell",X,Y))
{
out_str_Sell(X,Y, col_Buy_Sell);
if (ust_Sell_otl(pr,lot))Del_Horiz_Line();
}
}
return(out);
}
//--------------------------------------------
void out_inf(color col)
{
string str1="Баланс: "+DoubleToStr(AccountInfoDouble(ACCOUNT_BALANCE),2)+" "+AccountInfoString(ACCOUNT_CURRENCY)+
" Средства: "+DoubleToStr(AccountInfoDouble(ACCOUNT_EQUITY),2)+
" Залог: "+DoubleToStr(AccountInfoDouble(ACCOUNT_MARGIN),2);
string str2="Свободно: "+DoubleToStr(AccountInfoDouble(ACCOUNT_FREEMARGIN),2)+
" Уровень: "+DoubleToStr(AccountInfoDouble(ACCOUNT_MARGIN_LEVEL),2);
put_txt(pref+"inf1", str1, 10, 25, col, Font,2);
put_txt(pref+"inf2", str2, 10, 10, col, Font,2);
}
//-------------------------------------------
void out_str_Buy(int X, int Y, color col)
{
put_txt(pref+"Buy", "Buy", X, Y, col, Font,3);
}
//-------------------------------------------
void out_str_Sell(int X, int Y, color col)
{
put_txt(pref+"Sell", "Sell", X, Y, col, Font,3);
}
//-------------------------------------------
bool vozvrat_str(string NN, int X, int Y)
{
string name=pref+NN;
if (ObjectGet(name, OBJPROP_XDISTANCE)==X && ObjectGet(name, OBJPROP_YDISTANCE)==Y)return(true);
return(false);
}
//-------------------------------------------
bool sdvig_str(string NN, int X, int Y)
{
string name=pref+NN;
if (ObjectGet(name, OBJPROP_XDISTANCE)!=X)return(true);
if (ObjectGet(name, OBJPROP_YDISTANCE)!=Y)return(true);
return(false);
}
//-------------------------------------------
bool sdvig_txt(string name,int X,int Y)
{
if (ObjectGet(name, OBJPROP_XDISTANCE)!=X)return(true);
if (ObjectGet(name, OBJPROP_YDISTANCE)!=Y)return(true);
return(false);
}
//-------------------------------------------
void put_txt(string name, string vol, int X,int Y,color col1, int shr, int corn)
{
if (ObjectFind(name)<0)ObjectCreate(name, OBJ_LABEL, 0,0,0);
ObjectSet(name, OBJPROP_CORNER, corn);
ObjectSet(name, OBJPROP_XDISTANCE, X);
ObjectSet(name, OBJPROP_YDISTANCE, Y);
ObjectSetText(name, vol, shr, "Arial Black", col1);
}
//-----------------------------------------
bool Del_Horiz_Line()
{
string Obj_Name;
for(int k=ObjectsTotal()-1; k>=0; k--)
{
Obj_Name=ObjectName(k);
if (StringSubstr(Obj_Name,0,1)=="#")continue;
if (ObjectType(Obj_Name)==OBJ_HLINE)ObjectDelete(Obj_Name);
}
return(false);
}
//-----------------------------------------
double Find_Horiz_Line()
{
string Obj_Name;
double pr=0;
for(int k=ObjectsTotal()-1; k>=0; k--)
{
Obj_Name=ObjectName(k);
if (StringSubstr(Obj_Name,0,1)=="#")continue;
if (ObjectType(Obj_Name)==OBJ_HLINE)
{
pr=ObjectGet(Obj_Name, OBJPROP_PRICE1);
return(pr);
}
}
return(0);
}
//-------------------------------------------
bool ust_Buy_otl(double pr,double L1)
{
int ticketbuy=0;
double Stop_Level=MarketInfo(Symbol(),MODE_STOPLEVEL)*Point;
if (ND(pr)<Bid-Stop_Level)
ticketbuy = OrderSend(Symbol(),OP_BUYLIMIT,L1,ND(pr),0,0,0,"",Magic,0,Blue);
return(ticketbuy>0);
}
//-------------------------------------------
bool ust_Sell_otl(double pr,double L1)
{
int ticketsell=0;
double Stop_Level=MarketInfo(Symbol(),MODE_STOPLEVEL)*Point;
RefreshRates();
if (ND(pr)>Ask+Stop_Level)
ticketsell = OrderSend(Symbol(),OP_SELLLIMIT,L1,ND(pr),0,0,0,"",Magic,0,Blue);
return(ticketsell>0);
}
//-------------------------------------------
double ND(double n)
{
return(NormalizeDouble(n,Digits));
}
//---------------------------------------------------------------
void remove_objects(string PreName)
{
string Obj_Name,Head;
for(int k=ObjectsTotal()-1; k>=0; k--)
{
Obj_Name=ObjectName(k);
Head=StringSubstr(Obj_Name,0,StringLen(PreName));
if (Head==PreName)ObjectDelete(Obj_Name);
}
}
//----------------------------------------------
← предыдущая следующая →
rus008