cm-trade-system-201119.mq4
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «cm-trade-system-201119.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Торговый советник для платформы MetaTrader 4, предназначенный для ручной торговли. Отображает настраиваемую графическую панель на графике, через которую пользователь может размещать рыночные и отложенные ордера, закрывать позиции и управлять ими.
Советник позволяет открывать позиции Buy и Sell по текущей цене, а также выставлять отложенные ордера BuyStop, SellStop, BuyLimit и SellLimit с заданным отступом от цены. Предусмотрена возможность закрытия всех позиций одного направления или частичного закрытия по проценту.
Для открытых позиций советник предоставляет управление уровнями стоп-лосс, тейк-профит, трейлинг-стоп и перевода в безубыток. Настройки отображения панели включают шрифт, размер, тип окна, цветовую схему и возможность перемещения окна на графике. Поддерживается фильтрация ордеров и позиций по магическому номеру.
Настройки программы
| Настройка | Описание |
|---|---|
| лот (Lot) | лот — Размер лота для размещения ордеров |
| проскальзывание (slippage) | проскальзывание — Допустимое проскальзывание цены при исполнении ордера |
| отступ от текущей цены до отложенного ордера (delta) | отступ от текущей цены до отложенного ордера — Расстояние в пунктах от текущей цены для размещения отложенного ордера |
| дискретность изменения стопов (dpips) | дискретность изменения стопов — Шаг изменения уровней стоп-лосс и тейк-профит в пунктах |
| коэффициент изменения лота (dlot) | коэффициент изменения лота — Множитель для увеличения или уменьшения размера лота |
| дискретность изменения % (dpr) | дискретность изменения % — Шаг изменения процента риска при расчёте размера лота |
| дискретность изменения % закрытия (dcz) | дискретность изменения % закрытия — Шаг изменения процента частичного закрытия позиции |
| подтверждение действий (confirmation) | подтверждение действий — Запрос подтверждения перед выполнением торговых операций |
| стопы от уровня безубытка-Buy (TradeNoLossBuy) | стопы от уровня безубытка-Buy — Включает перевод стоп-лосса в уровень безубытка для позиций Buy |
| стопы от уровня безубытка-Sell (TradeNoLossSell) | стопы от уровня безубытка-Sell — Включает перевод стоп-лосса в уровень безубытка для позиций Sell |
| магик (если -1 то все магики) (Magic) | магик (если -1 то все магики) — Идентификатор ордеров и позиций для фильтрации; если -1, применяются все ордера |
| Шрифт (Font) | Шрифт — Шрифт для отображения текста на панели |
| размер (Width) | размер — Размер шрифта элементов панели |
| тип окна (TypeWind) | тип окна — Тип отображения панели: определяет набор отображаемых элементов и компоновку |
| тип цветового оформления (TypeColor) | тип цветового оформления — Вариант цветовой схемы панели |
| цвет (Color1) | цвет — Цветовой элемент панели |
| цвет (Color2) | цвет — Цветовой элемент панели |
| цвет (Color3) | цвет — Цветовой элемент панели |
| цвет (Color4) | цвет — Цветовой элемент панели |
| цвет (Color5) | цвет — Цветовой элемент панели |
| цвет (Color6) | цвет — Цветовой элемент панели |
| цвет (Color7) | цвет — Цветовой элемент панели |
| цвет (Color8) | цвет — Цветовой элемент панели |
| цвет (Color9) | цвет — Цветовой элемент панели |
| перемещать окно (MoveWindow) | перемещать окно — Разрешает перетаскивание панели мышью по графику |
| X | Координата X — Горизонтальная позиция панели на графике |
| Y | Координата Y — Вертикальная позиция панели на графике |
Поиск по коду файла
#property version "2.00"
#property strict
#property description "Советник для ручной торговли"
#property description "Помогает выставлять ордера и сопровождать сделки"
int StopLoss_Buy = 100, //стоплосс
TakeProfit_Buy = 100, //тейкпрофит
TrailingStop_Buy = 33, //трейлингстоп, если 0, то нет трейлинга, TrailingStop это и есть расстояние от текущей цены до стопа (дистанция по Вашему)
NoLoss_Buy = 2, //перевод в безубыток, если 0, то нет перевода в безубыток
StopLoss_Sell = 100, //стоплосс
TakeProfit_Sell = 100, //тейкпрофит
TrailingStop_Sell = 33, //трейлингстоп, если 0, то нет трейлинга, TrailingStop это и есть расстояние от текущей цены до стопа (дистанция по Вашему)
NoLoss_Sell = 2; //перевод в безубыток, если 0, то нет перевода в безубыток
input int TrailingStep = 1, //шаг трала
TrailingStart = 1; //минимальная прибыль с которой стартует тралл
extern double Lot = 0.01; //лот
input int slippage = 2; //проскальзывание
input int delta = 50; //отступ от текущей цены до отложенного ордера
input int dpips = 1; //дискретность изменения стопов
input double dlot = 1.5; //коэффициент изменения лота
input double dpr = 0; //дискретность изменения %
input int dcz = 10; //дискретность изменения % закрытия
input bool confirmation = true; //подтверждение действий
extern bool TradeNoLossBuy = true;//стопы от уровня безубытка-Buy
extern bool TradeNoLossSell = true;//стопы от уровня безубытка-Sell
extern int Magic = -1; //магик (если -1 то все магики)
input string Font = "Times New Roman"; // Шрифт
input int Width = 10; // размер
extern int TypeWind = 1; // тип окна
extern int TypeColor = 0; // тип цветового оформления
input color Color1 = clrBlack; // цвет
input color Color2 = clrWhite; // цвет
input color Color3 = clrBlue; // цвет
input color Color4 = clrRed; // цвет
input color Color5 = clrGreen; // цвет
input color Color6 = clrLemonChiffon; // цвет
input color Color7 = clrLightGray; // цвет
input color Color8 = clrSnow; // цвет
input color Color9 = clrGray; // цвет
extern bool MoveWindow = true;//перемещать окно
input long X=0;
input long Y=50;
double StopLossB,TakeProfitB,TrailingStopB,NoLossB,StopLossS,TakeProfitS,TrailingStopS,NoLossS;
string InpName="cm-Trade System";
double bid,risk=1,cz=100;
int STOPLEVEL;
string AC,knTpB,knSlB,knTsB,knNlB,knTpS,knSlS,knTsS,knNlS,knTrNlB,knTrNlS;
color Color_1,Color_2,Color_3,Color_4,Color_5,Color_6,Color_7,Color_8,Color_9;
bool TRADE;
void _color(int t)
{
switch(t)
{
case 0:
Color_1 = Color1;
Color_2 = Color2;
Color_3 = Color3;
Color_4 = Color4;
Color_5 = Color5;
Color_6 = Color6;
Color_7 = Color7;
Color_8 = Color8;
Color_9 = Color9;
break;
case 1:
Color_1 = clrWhite;
Color_2 = clrBlack;
Color_3 = clrLime;
Color_4 = clrRed;
Color_5 = clrLime;
Color_6 = clrGray;
Color_7 = clrGray;
Color_8 = clrDarkGray;
Color_9 = clrBlack;
break;
case 2:
Color_2 = clrBlack;
Color_1 = clrWhite;
Color_3 = clrLime;
Color_4 = clrRed;
Color_5 = clrLime;
Color_6 = clrSlateGray;
Color_7 = clrSlateGray;
Color_8 = clrLightSteelBlue;
Color_9 = clrBlack;
break;
case 3:
Color_2 = clrBlack;
Color_1 = clrWhite;
Color_3 = clrLime;
Color_4 = clrRed;
Color_5 = clrLime;
Color_6 = clrDarkGray;
Color_7 = clrDarkGray;
Color_8 = clrSilver;
Color_9 = clrBlack;
break;
default:
Color_1 = clrWhite;
Color_2 = clrBlack;
Color_3 = clrLime;
Color_4 = clrRed;
Color_5 = clrLime;
Color_6 = clrDarkGray;
Color_7 = clrDarkGray;
Color_8 = clrSilver;
Color_9 = clrBlack;
break;
}
}
int OnInit()
{
// код доступен только после оплаты
}
void OnDeinit(const int reason)
{
ObjectDelete(0,InpName);
Del();
ObjectDelete(0,"kn min");
ObjectDelete(0,"kn color");
ObjectDelete(0,"Symbol");
ObjectDelete(0,"_fon1_");
ObjectDelete(0,"_fon2_");
ObjectDelete(0,"NoLoss_NLb");
ObjectDelete(0,"NoLoss_NLs");
ObjectDelete(0,"NoLoss_NL");
EventKillTimer();
}
void Del()
{
ObjectDelete(0,"_fon3_");
ObjectDelete(0,"_5_");
ObjectDelete(0,"_6_");
ObjectDelete(0,"_7_");
ObjectDelete(0,"_8_");
ObjectDelete(0,"_9_");
ObjectDelete(0,"_10_");
ObjectDelete(0,"_11_");
ObjectDelete(0,"_12_");
ObjectDelete(0,"_13_");
ObjectDelete(0,"_14_");
ObjectDelete(0,"_15_");
ObjectDelete(0,"_16_");
ObjectDelete(0,"_17_");
ObjectDelete(0,"2");
ObjectDelete(0,"3");
ObjectDelete(0,"4");
ObjectDelete(0,"5");
ObjectDelete(0,"6");
ObjectDelete(0,"7");
ObjectDelete(0,"8");
ObjectDelete(0,"9");
ObjectDelete(0,"10");
ObjectDelete(0,"11");
ObjectDelete(0,"12");
ObjectDelete(0,"kn Buy");
ObjectDelete(0,"kn Sell");
ObjectDelete(0,"kn BuyStop");
ObjectDelete(0,"kn SellLimit");
ObjectDelete(0,"kn BuyLimit");
ObjectDelete(0,"kn SellStop");
ObjectDelete(0,"kn Del BuyStop");
ObjectDelete(0,"kn Del SellLimit");
ObjectDelete(0,"kn Close Buy");
ObjectDelete(0,"kn Close Sell");
ObjectDelete(0,"kn Del BuyLimit");
ObjectDelete(0,"kn Del SellStop");
ObjectDelete(0,knTpB);
ObjectDelete(0,knSlB);
ObjectDelete(0,knTsB);
ObjectDelete(0,knNlB);
ObjectDelete(0,knTpS);
ObjectDelete(0,knSlS);
ObjectDelete(0,knTsS);
ObjectDelete(0,knNlS);
ObjectDelete(0,knTrNlB);
ObjectDelete(0,knTrNlS);
ObjectDelete(0,StringConcatenate(knTpB," up"));
ObjectDelete(0,StringConcatenate(knSlB," up"));
ObjectDelete(0,StringConcatenate(knTsB," up"));
ObjectDelete(0,StringConcatenate(knNlB," up"));
ObjectDelete(0,StringConcatenate(knTpS," up"));
ObjectDelete(0,StringConcatenate(knSlS," up"));
ObjectDelete(0,StringConcatenate(knTsS," up"));
ObjectDelete(0,StringConcatenate(knNlS," up"));
ObjectDelete(0,StringConcatenate(knTpB," dn"));
ObjectDelete(0,StringConcatenate(knSlB," dn"));
ObjectDelete(0,StringConcatenate(knTsB," dn"));
ObjectDelete(0,StringConcatenate(knNlB," dn"));
ObjectDelete(0,StringConcatenate(knTpS," dn"));
ObjectDelete(0,StringConcatenate(knSlS," dn"));
ObjectDelete(0,StringConcatenate(knTsS," dn"));
ObjectDelete(0,StringConcatenate(knNlS," dn"));
ObjectDelete(0,"lot_");
ObjectDelete(0,"kn lot pr");
ObjectDelete(0,"kn lot l");
ObjectDelete(0,"kn lot up");
ObjectDelete(0,"kn lot dn");
ObjectDelete(0,"kn CZ1");
ObjectDelete(0,"_CZ1_");
ObjectDelete(0,"kn CZ");
ObjectDelete(0,"kn cz up");
ObjectDelete(0,"kn cz dn");
ObjectDelete(0,"spread");
ObjectDelete(0,"Profit");
ObjectDelete(0,"_Profit");
ObjectDelete(0,"Equity");
ObjectDelete(0,"_Equity");
ObjectDelete(0,"Balance");
ObjectDelete(0,"_Balance");
}
void OnTick() {
// код доступен только после оплаты
}
void OnTimer()
{
TRADE=IsTradeAllowed();
if (ObjectGetInteger(0,"kn min",OBJPROP_STATE))
{
TypeWind++;
if (TypeWind>3) TypeWind=0;
Del();
ObjectSetInteger(0,"kn min",OBJPROP_STATE,false);
}
if (ObjectGetInteger(0,"kn color",OBJPROP_STATE))
{
TypeColor++;
if (TypeColor>4) TypeColor=0;
ObjectSetInteger(0,"kn color",OBJPROP_STATE,false);
}
chekbuttom();
return;
}
bool ButtonCreate(const long chart_ID=0, // ID графика
const string name="Button", // имя кнопки
const int sub_window=0, // номер подокна
const long x=0, // координата по оси X
const long y=0, // координата по оси y
const int width=50, // ширина кнопки
const int height=18, // высота кнопки
const string text="Button", // текст
const string font="Arial", // шрифт
const int font_size=10, // размер шрифта
const color clr=clrNONE, //цвет текста
const color clrON=clrNONE, //цвет фона
const color clrOFF=clrNONE, //цвет фона
const bool state=false) // нажата/отжата
{
if (ObjectFind(chart_ID,name)==-1)
{
ObjectCreate(chart_ID,name,OBJ_BUTTON,sub_window,0,0);
ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,CORNER_LEFT_UPPER);
ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,0);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,0);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,0);
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,1);
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,0);
ObjectSetInteger(chart_ID,name,OBJPROP_STATE,state);
ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_COLOR,clrNONE);
}
color back_clr;
if (ObjectGetInteger(chart_ID,name,OBJPROP_STATE)) back_clr=clrON; else back_clr=clrOFF;
ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr);
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
return(true);
}
bool RectLabelCreate(const long chart_ID=0, // ID графика
const string name="RectLabel", // имя метки
const int sub_window=0, // номер подокна
const long x=0, // координата по оси X
const long y=0, // координата по оси y
const int width=50, // ширина
const int height=18, // высота
const color back_clr=clrNONE, // цвет фона
const color clr=clrNONE, //цвет плоской границы (Flat)
const ENUM_LINE_STYLE style=STYLE_SOLID, // стиль плоской границы
const int line_width=1, // толщина плоской границы
const bool back=false, // на заднем плане
const bool selection=false, // выделить для перемещений
const bool hidden=true, // скрыт в списке объектов
const long z_order=0) // приоритет на нажатие мышью
{
ResetLastError();
if (ObjectFind(chart_ID,name)==-1)
{
ObjectCreate(chart_ID,name,OBJ_RECTANGLE_LABEL,sub_window,0,0);
ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_TYPE,BORDER_FLAT);
ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,CORNER_LEFT_UPPER);
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,line_width);
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
}
ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr);
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
return(true);
}
bool LabelCreate(const long chart_ID=0, // ID графика
const string name="Label", // имя метки
const int sub_window=0, // номер подокна
const long x=0, // координата по оси X
const long y=0, // координата по оси y
const ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER, // угол графика для привязки
const string text="Label", // текст
const string font="Arial", // шрифт
const int font_size=10, // размер шрифта
const color clr=clrNONE,
const double angle=0.0, // наклон текста
const ENUM_ANCHOR_POINT anchor=ANCHOR_LEFT_UPPER, // способ привязки
const bool back=false, // на заднем плане
const bool selection=true, // выделить для перемещений
const bool hidden=true, // скрыт в списке объектов
const long z_order=0) // приоритет на нажатие мышью
{
ResetLastError();
if (ObjectFind(chart_ID,name)==-1)
{
if(!ObjectCreate(chart_ID,name,OBJ_LABEL,sub_window,0,0))
{
Print(__FUNCTION__,": failed to create text label! Error code = ",GetLastError());
return(false);
}
ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
ObjectSetDouble(chart_ID,name,OBJPROP_ANGLE,angle);
ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
}
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
return(true);
}
bool SendOrder(int tip, double lot, double p)
{
if (confirmation)
{
string txt;
if (tip==OP_BUY) txt=StringConcatenate("Open position BUY ",DoubleToStr(lot,2)," lot for the price ",DoubleToStr(p,Digits)," ?");
if (tip==OP_SELL) txt=StringConcatenate("Open position SELL ",DoubleToStr(lot,2)," lot for the price ",DoubleToStr(p,Digits)," ?");
if (tip==OP_BUYSTOP) txt=StringConcatenate("Open order BUYSTOP ",DoubleToStr(lot,2)," lot for the price ",DoubleToStr(p,Digits)," ?");
if (tip==OP_SELLSTOP) txt=StringConcatenate("Open order SELLSTOP ",DoubleToStr(lot,2)," lot for the price ",DoubleToStr(p,Digits)," ?");
if (tip==OP_BUYLIMIT) txt=StringConcatenate("Open order BUYLIMIT ",DoubleToStr(lot,2)," lot for the price ",DoubleToStr(p,Digits)," ?");
if (tip==OP_SELLLIMIT) txt=StringConcatenate("Open order SELLLIMIT ",DoubleToStr(lot,2)," lot for the price ",DoubleToStr(p,Digits)," ?");
int ret=MessageBox(txt,"", MB_YESNO);
if (ret==IDNO) return(true);
}
int nn=0;
while(true)
{
RefreshRates();
if (OrderSend(Symbol(),tip,lot,p,slippage,0,0,NULL,Magic,0,clrNONE)==-1)
{
Print("Order Send Error ",GetLastError()," Lot ",lot);
Sleep(1000);
}
else return(true);
nn++;
if (nn>10) return(false);
}
return(false);
}
int Redraw()
{
RefreshRates();
double StLo,OSL,OTP,OOP,SL,TP;
STOPLEVEL=StrToInteger(DoubleToStr(MarketInfo(Symbol(),MODE_STOPLEVEL),0));
double stoplevel=STOPLEVEL*Point;
int b=0,s=0,bs=0,ss=0,bl=0,sl=0,tip;
double OL,LB=0,LS=0,ProfitB=0,ProfitS=0;
StopLossB = Kn(knSlB,StopLossB);
TakeProfitB = Kn(knTpB,TakeProfitB);
NoLossB = Kn(knNlB,NoLossB);
TrailingStopB = Kn(knTsB,TrailingStopB);
StopLossS = Kn(knSlS,StopLossS);
TakeProfitS = Kn(knTpS,TakeProfitS);
NoLossS = Kn(knNlS,NoLossS);
TrailingStopS = Kn(knTsS,TrailingStopS);
bool TrNoLossB = Kn(knTrNlB,1)==1;
bool TrNoLossS = Kn(knTrNlS,1)==1;
int i,Ticket;
double price_b=0,price_s=0;
for (i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol()==Symbol() && (Magic==-1 || Magic==OrderMagicNumber()))
{
OSL = NormalizeDouble(OrderStopLoss(),Digits);
OTP = NormalizeDouble(OrderTakeProfit(),Digits);
OOP = NormalizeDouble(OrderOpenPrice(),Digits);
Ticket=OrderTicket();
SL=OSL;TP=OTP;
tip = OrderType();
OL = OrderLots();
if (tip==OP_BUY)
{
b++;
LB+=OL;price_b+=(Bid-OOP)*OL+(OrderCommission()+OrderSwap())*Point;
ProfitB+=OrderProfit()+OrderCommission()+OrderSwap();
if (OSL==0 && Bid-NormalizeDouble(OOP - StopLossB * Point,Digits)>=stoplevel && StopLossB!=0)
{
SL = NormalizeDouble(OOP - StopLossB * Point,Digits);
}
if (StopLossB==0 && NoLossB==0 && TrailingStopB==0) SL=0;
if (TakeProfitB==0) TP=0;
if (!TrNoLossB)
{
if (OTP==0 && NormalizeDouble(OOP + TakeProfitB * Point,Digits)-Ask>=stoplevel && TakeProfitB!=0)
{
TP = NormalizeDouble(OOP + TakeProfitB * Point,Digits);
}
if (OSL<OOP && NoLossB!=0)
{
if (Bid-OOP >= NoLossB*Point && Bid-OOP >= stoplevel) SL = OOP+Point;
}
if (TrailingStopB!=0)
{
StLo = NormalizeDouble(Bid - TrailingStopB*Point,Digits);
if (StLo >= OOP+TrailingStart*Point && StLo > OSL+TrailingStep*Point && StLo <= NormalizeDouble(Bid - stoplevel,Digits)) SL = StLo;
}
}
if (TRADE && (SL > OSL || TP != OTP))
{
Comment("Order Modify ",Ticket," Buy, SL ",OSL,"->",SL,", TP ",OTP,"->",TP);
if (!OrderModify(Ticket,OOP,SL,TP,0,White)) Print("Error Order Modify ",GetLastError());
}
}
if (tip==OP_SELL)
{
s++;
LS+=OL;price_s+=(OOP-Ask)*OL+(OrderCommission()+OrderSwap())*Point;
ProfitS+=OrderProfit()+OrderCommission()+OrderSwap();
if (OSL==0 && NormalizeDouble(OOP + StopLossS * Point,Digits)-Ask>=stoplevel && StopLossS!=0)
{
SL = NormalizeDouble(OOP + StopLossS * Point,Digits);
}
if (StopLossS==0 && NoLossS==0 && TrailingStopS==0) SL=0;
if (TakeProfitS==0) TP=0;
if (!TrNoLossS)
{
if (OTP==0 && Bid-NormalizeDouble(OOP - TakeProfitS * Point,Digits)>=stoplevel && TakeProfitS!=0)
{
TP = NormalizeDouble(OOP - TakeProfitS * Point,Digits);
}
if ((OSL>OOP || OSL==0) && NoLossS!=0)
{
if (OOP-Ask >= NoLossS*Point && (OOP < OSL || OSL==0) && OOP-Ask >= stoplevel) SL = OOP-Point;
}
if (TrailingStopS!=0)
{
StLo = NormalizeDouble(Ask + TrailingStopS*Point,Digits);
if (StLo <= OOP-TrailingStart*Point && (StLo < OSL-TrailingStep*Point || OSL==0) && StLo >= NormalizeDouble(Ask + stoplevel,Digits)) SL = StLo;
}
}
if (TRADE && ((SL < OSL || (OSL==0 && SL!=0)) || TP != OTP))
{
Comment("Order Modify ",Ticket," Sell, SL ",OSL,"->",SL,", TP ",OTP,"->",TP);
if (!OrderModify(Ticket,OOP,SL,TP,0,White)) Print("Error Order Modify ",GetLastError());
}
}
if (tip==OP_BUYSTOP)
{
bs++;
}
if (tip==OP_SELLLIMIT)
{
sl++;
}
if (tip==OP_BUYLIMIT)
{
bl++;
}
if (tip==OP_SELLSTOP)
{
ss++;
}
}
}
}
double NL=0,NLb=0,NLs=0;
if(LB>0) NLb=Bid-price_b/LB;
ARROW("NoLoss_NLb", NLb, 6, Color_3);
if(LS>0) NLs=Ask+price_s/LS;
ARROW("NoLoss_NLs", NLs, 6, Color_4);
if(LB-LS>0) NL=Bid-(price_b+price_s)/(LB-LS);
if(LB-LS<0) NL=Ask-(price_b+price_s)/(LB-LS);
ARROW("NoLoss_NL", NL, 6, clrYellow);
if (TrNoLossB || TrNoLossS)
{
for (i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol()==Symbol() && (Magic==-1 || Magic==OrderMagicNumber()))
{
OSL = NormalizeDouble(OrderStopLoss(),Digits);
OTP = NormalizeDouble(OrderTakeProfit(),Digits);
OOP = NormalizeDouble(OrderOpenPrice(),Digits);
Ticket=OrderTicket();
SL=OSL;TP=OTP;
tip = OrderType();
OL = OrderLots();
if (tip==OP_BUY && TrNoLossB)
{
if (NormalizeDouble(NLb + TakeProfitB * Point,Digits)-Ask>=stoplevel && TakeProfitB!=0)
{
TP = NormalizeDouble(NLb + TakeProfitB * Point,Digits);
}
if (OSL<OOP && NoLossB!=0)
{
if (Bid-NLb >= NoLossB*Point && Bid-NLb >= stoplevel) SL = NLb+Point;
}
if (TrailingStopB!=0)
{
StLo = NormalizeDouble(Bid - TrailingStopB*Point,Digits);
if (StLo >= NLb+TrailingStart*Point && StLo > OSL+TrailingStep*Point && StLo <= NormalizeDouble(Bid - stoplevel,Digits)) SL = StLo;
}
if (TRADE && (SL > OSL || TP != OTP))
{
Comment("Order Modify ",Ticket," from breakeven Buy SL ",OSL,"->",SL,", TP ",OTP,"->",TP);
if (!OrderModify(Ticket,OOP,SL,TP,0,White)) Print("Error Order Modify ",GetLastError());
}
}
if (tip==OP_SELL && TrNoLossS)
{
if (Bid-NormalizeDouble(NLs - TakeProfitS * Point,DiПоказано первые 50% кода (символов: 37040)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.