В данном варианте не принципиально.Можно напрямую записать там где расчет тп, стоплосса MarketInfo(NULL,MODE_STOPLEVEL);
Может быть стоит логику советника изменить?
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
int STOPLEVEL=MarketInfo(OrderSymbol(),MODE_STOPLEVEL);
double OSL,OTP,OOP,StLo,SL,TP;
double Profit=0,ProfitS=0,ProfitB=0,LB=0,LS=0,NLb=0,NLs=0,price_b=0,price_s=0,OL=0;
int b=0,s=0,OT=0,OMN=0;
for (int i=OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
OMN = OrderMagicNumber();
if (OrderSymbol() == Symbol())
{
OOP = NormalizeDouble(OrderOpenPrice(),Digits);
OT = OrderType();
OL = OrderLots();
if (OT==OP_BUY)
{
price_b = price_b+OOP*OL;
b++; LB+= OL;
ProfitB+=OrderProfit()+OrderSwap()+OrderCommission();
}
if (OT==OP_SELL)
{
price_s = price_s+OOP*OL;
s++;LS+= OL;
ProfitS+=OrderProfit()+OrderSwap()+OrderCommission();
}
}
}
}
Profit=ProfitB+ProfitS;
/*
Ниже код задачи который озвучил автор:
- при достижении максимально допустимого убытка советника extern double Loss = -90.0; //Общий убыток $ (=0 откл)
- все позиции имеющие максимально допустимый убыток на позицию extern double loss = 10.0; //При каком убытке в $ закроется убыточная позициия
- закроются эти позиции
*/
if(Loss!=0 && Profit<Loss)ClosePosBySizeLossInCurrency(Symbol(),-1,Magic,loss);// в такой записи закроются все позиции в терминале у которых убыток
//в валюте депозита превысил некоторое значение но только текущего символа например EURUSD
//любое направление торговли, магик = Magic и если профит позиции<=-loss без доп.условий.
//просто выполняется роль стоплосса.
ObjectDelete("SLb");
ObjectDelete("SLs");
if (b>0)
{
NLb = NormalizeDouble(price_b/LB,Digits);
ObjectCreate("SLb",OBJ_ARROW,0,Time[0],NLb,0,0,0,0);
ObjectSet ("SLb",OBJPROP_ARROWCODE,6);
ObjectSet ("SLb",OBJPROP_COLOR, Blue);
}
if (s>0)
{
NLs = NormalizeDouble(price_s/LS,Digits);
ObjectCreate("SLs",OBJ_ARROW,0,Time[0],NLs,0,0,0,0);
ObjectSet ("SLs",OBJPROP_ARROWCODE,6);
ObjectSet ("SLs",OBJPROP_COLOR, Red);
}
int OTicket;
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol()==Symbol())
{
OT = OrderType();
OSL = NormalizeDouble(OrderStopLoss(),Digits);
OTP = NormalizeDouble(OrderTakeProfit(),Digits);
OOP = NormalizeDouble(OrderOpenPrice(),Digits);
SL=OSL;TP=OTP;
if (OT==OP_BUY)
{
b++;
if (OSL==0 && Stoploss>=STOPLEVEL && Stoploss!=0)
{
SL = NormalizeDouble(Bid - Stoploss * Point,Digits);
}
else SL=OSL;
if (OTP==0 && Takeprofit>=STOPLEVEL && Takeprofit!=0)
{
TP = NormalizeDouble(Ask + Takeprofit * Point,Digits);
}
else TP=OTP;
if (NoLoss>=STOPLEVEL && OSL<NLb && NoLoss!=0)
{
if (OOP<=NLb && NLb!=0 && NLb <= NormalizeDouble(Bid-NoLoss*Point,Digits))
SL = NormalizeDouble(NLb+MinProfitNoLoss*Point,Digits);
}
if (TrailingStop>=STOPLEVEL && TrailingStop!=0)
{
StLo = NormalizeDouble(Bid - TrailingStop*Point,Digits);
if (StLo>=NLb && NLb!=0) if (StLo > OSL) SL = StLo;
}
if (SL != OSL || TP != OTP)
{
OTicket=OrderTicket();
if (!OrderModify(OTicket,OOP,SL,TP,0,White)) Print("Error OrderModify ",GetLastError());
}
}
if (OT==OP_SELL)
{
s++;
if (OSL==0 && Stoploss>=STOPLEVEL && Stoploss!=0)
{
SL = NormalizeDouble(Ask + Stoploss * Point,Digits);
}
else SL=OSL;
if (OTP==0 && Takeprofit>=STOPLEVEL && Takeprofit!=0)
{
TP = NormalizeDouble(Bid - Takeprofit * Point,Digits);
}
else TP=OTP;
if (NoLoss>=STOPLEVEL && (OSL>NLs || OSL==0) && NoLoss!=0)
{
if (OOP>=NLs && NLs!=0 && NLs >= NormalizeDouble(Ask+NoLoss*Point,Digits))
SL = NormalizeDouble(NLs-MinProfitNoLoss*Point,Digits);
}
if (TrailingStop>=STOPLEVEL && TrailingStop!=0)
{
StLo = NormalizeDouble(Ask + TrailingStop*Point,Digits);
if (StLo<=NLs && NLs!=0) if (StLo < OSL || OSL==0) SL = StLo;
}
if ((SL != OSL || OSL==0) || TP != OTP)
{
OTicket=OrderTicket();
if (!OrderModify(OTicket,OOP,SL,TP,0,White)) Print("Error OrderModify ",GetLastError());
}
}
}
}
}
if (IsTesting())
{
if (OrdersTotal()==0)
{
if (OrderSend(Symbol(),OP_BUY,0.1,NormalizeDouble(Ask,Digits),3,0,0,"тест",0,0,Blue)==-1) Print("Error OrderSend ",GetLastError());
if (OrderSend(Symbol(),OP_SELL,0.1,NormalizeDouble(Bid,Digits),3,0,0,"тест",0,0,Red)==-1) Print("Error OrderSend ",GetLastError());
}
}
}
//+----------------------------------------------------------------------------+
<code> //+------------------------------------------------------------------+ //| alex30774.mq4 | //| Copyright 2013, MetaQuotes Software Corp. | //| http://www.mункцql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2013, MetaQuotes Software Corp." #property link "http://www.mункцql5.com" #property version "1.00" #property strict extern double Loss = -90.0; //Общий убыток $ (=0 откл) extern double loss = 10.0; //При каком убытке в $ закроется убыточная позициия extern int Stoploss = 100, //стоплосс, если 0 то не изменяется Takeprofit = 400; //тейкпрофит, если 0 то не изменяется extern int TrailingStop = 20; //длинна тралла, если 0 то нет тралла extern int StepTrall = 1; //шаг тралла - перемещать стоплосс не ближе чем StepTrall extern int NoLoss = 10, //перевод в безубыток при заданном кол-ве пунктов прибыли, если 0 то нет перевода в безубыток MinProfitNoLoss = 0; //минимальная прибыль при переводе вбезубыток extern int Magic = -1 ; //Магик ордеров ( все ордера счетать всегда //------- Глобальные переменные для безошибочной компиляции -------------------+ int Slippage = 3; // Проскальзывание цены color clCloseBuy = Blue; // Цвет значка закрытия покупки color clCloseSell = Red; // Цвет значка закрытия продажи*/ //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- ObjectDelete("SLb"); ObjectDelete("SLs"); } //+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 25.04.2008 | //| Описание : Закрытие тех позиций, у которых убыток в валюте депозита | //| превысил некоторое значение | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" - любой символ, | //| NULL - текущий символ) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //| pr - профит/убыток | //+----------------------------------------------------------------------------+ void ClosePosBySizeLossInCurrency(string sy="", int op=-1, int mn=-1, double pr=0) { int i, k=OrdersTotal(); if (sy=="0") sy=Symbol(); for (i=k-1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (mn<0 || OrderMagicNumber()==mn) { if (OrderProfit()+OrderSwap()<-MathAbs(pr)) ClosePosBySelect(); } } } } } } //+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 13.06.2007 | //| Описание: Закрытие одной предварительно выбранной позиции | //+----------------------------------------------------------------------------+ void ClosePosBySelect() { double pp; int dg=(int)SymbolInfoInteger(OrderSymbol(), SYMBOL_DIGITS); bool rez=0; if (OrderType()==OP_BUY) { pp=NormalizeDouble(MarketInfo(OrderSymbol(), MODE_BID), dg); rez=OrderClose(OrderTicket(), OrderLots(), pp, Slippage, clCloseBuy); } if (OrderType()==OP_SELL) { pp=NormalizeDouble(MarketInfo(OrderSymbol(), MODE_ASK), dg); rez=OrderClose(OrderTicket(), OrderLots(), pp, Slippage, clCloseSell); } } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ </code>
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link "http://www.mql5.com"
#property version "1.00"
#property strict
//------- Внешние параметры советника ------------------------------------------
extern string _P_Trade = "---------- Параметры торговли";
extern double Lots = 0.1; // Лот
extern double loss = 10.0; //При каком убытке в $ закроется убаточная позициия
extern int StopLoss = 0; // Стоп
extern int TakeProfit = 0; // Тейк
extern int Starthour = 8;
extern int Endhour = 23;
extern int Magic = -1;
//------- Глобальные переменные советника --------------------------------------
int Slippage = 3; // Проскальзывание
color clOpenBuy = LightBlue; // Цвет открытия покупки
color clOpenSell = LightCoral; // Цвет открытия продажи
color clModifyBuy = Aqua; // Цвет модификации покупки
color clModifySell = Tomato; // Цвет модификации продажи
color clCloseBuy = Blue; // Цвет закрытия покупки
color clCloseSell = Red; // Цвет закрытия продажи
//------- Подключение внешних модулей ------------------------------------------
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+----------------------------------------------------------------------------+
//| expert start function |
//+----------------------------------------------------------------------------+
void OnTick() {
double sl=0, tp=0;
if(Hour()==Endhour)ClosePosBySizeLossInCurrency(Symbol(),-1,Magic,loss);//можно записать просто так, тогда в такой записи закроются все позиции в терминале у которых убыток
//в валюте депозита превысил некоторое значение но только текущего символа например EURUSD
//любое направление торговли, магик = Magic и если профит позиции<=-loss без доп.условий.
//просто выполняется роль стоплосса.
if (!ExistPositions() && Hour()==Starthour) {
if (StopLoss!=0) sl=Ask-StopLoss*Point;
if (TakeProfit!=0) tp=Ask+TakeProfit*Point;
OpenPosition("", OP_BUY, sl, tp);
if (StopLoss!=0) sl=Bid+StopLoss*Point;
if (TakeProfit!=0) tp=Bid-TakeProfit*Point;
OpenPosition("", OP_SELL, sl, tp);
}
}
//+----------------------------------------------------------------------------+
//| Закрытие позиций по рыночной цене |
//| Параметры: |
//| sym - наименование инструмента ("" - текущий символ) |
//| op - операция (-1 - любая позиция) |
//| mn - MagicNumber (-1 - любой магик) |
//+----------------------------------------------------------------------------+
void ClosePositions(string sym="", int op=-1, int mn=-1) {
int i, k=OrdersTotal();
bool rez=0;
if (sym=="") sym=Symbol();
for (i=k-1; i>=0; i--) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==sym && (op<0 || OrderType()==op)) {
if (mn<0 || OrderMagicNumber()==mn) {
if (OrderType()==OP_BUY) {
rez = OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, clCloseBuy);
}
if (OrderType()==OP_SELL) {
rez = OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, clCloseSell);
}
}
}
}
}
}
//+----------------------------------------------------------------------------+
//| Возвращает флаг существования позиций |
//| Параметры: |
//| sym - наименование инструмента ("" - текущий символ) |
//| op - операция (-1 - любая позиция) |
//| mn - MagicNumber (-1 - любой магик) |
//+----------------------------------------------------------------------------+
bool ExistPositions(string sym="", int op=-1, int mn=-1) {
int i, k=OrdersTotal();
if (sym=="") sym=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==sym) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) return(True);
}
}
}
}
}
return(False);
}
//+----------------------------------------------------------------------------+
//| Открытие позиции |
//| Параметры: |
//| sym - наименование инструмента ("" - текущий символ) |
//| op - операция |
//| sl - стоп |
//| tp - тейк |
//+----------------------------------------------------------------------------+
void OpenPosition(string sym, int op, double sl=0, double tp=0, int mn=-1) {
color clOpen;
double pp;
bool rez=0;
if (sym=="") sym=Symbol();
if (op==OP_BUY) {
clOpen=clOpenBuy; pp=Ask;
} else {
clOpen=clOpenSell; pp=Bid;
}
rez = OrderSend(sym, op, Lots, pp, Slippage, sl, tp, "", mn, 0, clOpen);
}
//+----------------------------------------------------------------------------+
//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Версия : 13.06.2007 |
//| Описание: Закрытие одной предварительно выбранной позиции |
//+----------------------------------------------------------------------------+
void ClosePosBySelect() {
double pp;
int dg=MarketInfo(OrderSymbol(), MODE_DIGITS);
bool rez=0;
if (OrderType()==OP_BUY) {
pp=NormalizeDouble(MarketInfo(OrderSymbol(), MODE_BID), dg);
rez=OrderClose(OrderTicket(), OrderLots(), pp, Slippage, clCloseBuy);
}
if (OrderType()==OP_SELL) {
pp=NormalizeDouble(MarketInfo(OrderSymbol(), MODE_ASK), dg);
rez=OrderClose(OrderTicket(), OrderLots(), pp, Slippage, clCloseSell);
}
}
//+----------------------------------------------------------------------------+
//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Версия : 25.04.2008 |
//| Описание : Закрытие тех позиций, у которых убыток в валюте депозита |
//| превысил некоторое значение |
//+----------------------------------------------------------------------------+
//| Параметры: |
//| sy - наименование инструмента ("" - любой символ, |
//| NULL - текущий символ) |
//| op - операция (-1 - любая позиция) |
//| mn - MagicNumber (-1 - любой магик) |
//| pr - профит/убыток |
//+----------------------------------------------------------------------------+
void ClosePosBySizeLossInCurrency(string sy="", int op=-1, int mn=-1, double pr=0) {
int i, k=OrdersTotal();
if (sy=="0") sy=Symbol();
for (i=k-1; i>=0; i--) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (mn<0 || OrderMagicNumber()==mn) {
if (OrderProfit()+OrderSwap()<-MathAbs(pr)) ClosePosBySelect();
}
}
}
}
}
}
//+----------------------------------------------------------------------------+
0 errors, 19 warnings, 679 msec elapsed 1 20
//#include <stdlib.mqh> // Стандартная библиотека
'ErrorDescription' - function not defined PirMA.mq4 604 15
1 errors, 19 warnings 2 20
#include <stdlib.mqh> // Стандартная библиотека
//+----------------------------------------------------------------------------+
//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Версия : 13.06.2007 |
//| Описание: Закрытие одной предварительно выбранной позиции |
//+----------------------------------------------------------------------------+
void ClosePosBySelect() {
double pp;
int dg=MarketInfo(OrderSymbol(), MODE_DIGITS);
bool rez=0;
if (OrderType()==OP_BUY) {
pp=NormalizeDouble(MarketInfo(OrderSymbol(), MODE_BID), dg);
rez=OrderClose(OrderTicket(), OrderLots(), pp, Slippage, clCloseBuy);
}
if (OrderType()==OP_SELL) {
pp=NormalizeDouble(MarketInfo(OrderSymbol(), MODE_ASK), dg);
rez=OrderClose(OrderTicket(), OrderLots(), pp, Slippage, clCloseSell);
}
}
//+----------------------------------------------------------------------------+
//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Версия : 25.04.2008 |
//| Описание : Закрытие тех позиций, у которых убыток в валюте депозита |
//| превысил некоторое значение |
//+----------------------------------------------------------------------------+
//| Параметры: |
//| sy - наименование инструмента ("" - любой символ, |
//| NULL - текущий символ) |
//| op - операция (-1 - любая позиция) |
//| mn - MagicNumber (-1 - любой магик) |
//| pr - профит/убыток |
//+----------------------------------------------------------------------------+
void ClosePosBySizeLossInCurrency(string sy="", int op=-1, int mn=-1, double pr=0) {
int i, k=OrdersTotal();
if (sy=="0") sy=Symbol();
for (i=k-1; i>=0; i--) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (mn<0 || OrderMagicNumber()==mn) {
if (OrderProfit()+OrderSwap()<-MathAbs(pr)) ClosePosBySelect();
}
}
}
}
}
}
//+----------------------------------------------------------------------------+
extern double Lot = 0.01;
extern double Loss = -90.0; //Общий убыток $ (=0 откл)
extern double loss = 10.0; //При каком убытке в $ закроется убаточная позициия
extern int Stoploss = 100, //стоплосс, если 0 то не изменяется
Takeprofit = 400; //тейкпрофит, если 0 то не изменяется
extern int TrailingStop = 0; //длинна тралла, если 0 то нет тралла
extern int StepTrall = 0; //шаг тралла - перемещать стоплосс не ближе чем StepTrall
extern int NoLoss = 0, //перевод в безубыток при заданном кол-ве пунктов прибыли, если 0 то нет перевода в безубыток
MinProfitNoLoss = 0; //минимальная прибыль при переводе вбезубыток
extern int Magic = 12 ; //Магик ордеров ( все ордера счетать всегда
//------- Глобальные переменные для безошибочной компиляции -------------------+
bool gbDisabled = False; // Флаг блокировки советника
bool MarketWatch = True; // Запросы под исполнение "Market Watch".
int Slippage = 3; // Проскальзывание цены
int NumberOfTry = 5; // Количество торговых попыток
bool UseSound = True; // Использовать звуковой сигнал
string SoundSuccess = "ok.wav"; // Звук успеха
string SoundError = "timeout.wav"; // Звук ошибки
color clOpenBuy = LightBlue; // Цвет значка открытия покупки
color clOpenSell = LightCoral; // Цвет значка открытия продажи
color clCloseBuy = Blue; // Цвет значка закрытия покупки
color clCloseSell = Red; // Цвет значка закрытия продажи
#include <stdlib.mqh> // Стандартная библиотека
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick() //главная функция
{
double SL=0,TP=0;//в начале работы функции обнуляем некоторые переменные
double ProfitS=0,ProfitB=0,profit=0;//в начале работы функции обнуляем некоторые переменные
int b=0,s=0;//в начале работы функции обнуляем некоторые переменные
int bs=0;//в начале работы функции обнуляем некоторые переменные
for (int i=OrdersTotal()-1; i>=0; i--)//далее смотрим на наличие ордеров и позиций
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))//если они есть, тогда начинаем их сортировать по разным признакам
{
if (OrderSymbol() == Symbol() && OrderMagicNumber()==Magic)//в данном примере сортируем по торгуемому символу и магическому ордеру
{
if (OrderType()==OP_BUY)//если это наши позиции, тогда сортирем их дальше по направлению торговли - эти позиции на покупку
{
b++; // считаем сколько всего позиций на покупку
ProfitB+=OrderProfit()+OrderSwap()+OrderCommission();//считаем какой суммарный профит по этим позициям на покупку
}
if (OrderType()==OP_SELL)//если это наши позиции, тогда сортирем их дальше по направлению торговли - эти позиции на продажу
{
s++; // считаем сколько всего позиций на продажу
ProfitS+=OrderProfit()+OrderSwap()+OrderCommission();//считаем какой суммарный профит по этим позициям на продажу
}
}
}
}
profit = ProfitB+ProfitS;//сложив оба профита получаем суммарный профит (или убыток) по советнику в целом
bs = b+s;//сложив все позиции получаем суммарное кол-во позиций по советнику в целом
/*
//пример использования нужной вам функции.условия могут быть самые различные - например можно привязать к
//кол-ву открытых позиций как по направлению торговли так и в целом по советнику.или закрытие по времени или ...
if(Loss!=0 && profit<-Loss)//в данном примере смотрив : если суммарный убыток по советнику больше чем допустимо, тогда:
{
ClosePosBySizeLossInCurrency("",-1,-1,loss);//в такой записи закроются все позиции в терминале у которых убыток
//в валюте депозита превысил некоторое значение
//любой символ, любое направление торговли, любой магик и если профит позиции<=-loss
ClosePosBySizeLossInCurrency(Symbol(),-1,-1,loss);//в такой записи закроются все позиции в терминале у которых убыток
//в валюте депозита превысил некоторое значение но только текущего символа например EURUSD
//любое направление торговли, любой магик и если профит позиции<=-loss
ClosePosBySizeLossInCurrency(Symbol(),-1,Magic,loss);//в такой записи закроются все позиции в терминале у которых убыток
//в валюте депозита превысил некоторое значение но только текущего символа например EURUSD
//любое направление торговли, магик = Magic и если профит позиции<=-loss
ClosePosBySizeLossInCurrency(Symbol(),OP_BUY,-1,loss);//в такой записи закроются все позиции в терминале у которых убыток в
//валюте депозита превысил некоторое значение но только текущего символа например EURUSD
//только покупки, любой магик и если профит позиции<=-loss
ClosePosBySizeLossInCurrency(Symbol(),OP_SELL,-1,loss);//в такой записи закроются все позиции в терминале у которых убыток в
//валюте депозита превысил некоторое значение но только текущего символа например EURUSD
//только продажи, любой магик и если профит позиции<=-loss
ClosePosBySizeLossInCurrency(Symbol(),OP_BUY,Magic,loss);//в такой записи закроются все позиции в терминале у которых убыток в
//валюте депозита превысил некоторое значение но только текущего символа например EURUSD
//только покупки, магик = Magic и если профит позиции<=-loss
ClosePosBySizeLossInCurrency(Symbol(),OP_SELL,Magic,loss);//в такой записи закроются все позиции в терминале у которых убыток в
//валюте депозита превысил некоторое значение но только текущего символа например EURUSD
//только продажи, магик = Magic и если профит позиции<=-loss
Comment("УБЫТОК СОВЕТНИКА ПРЕВЫСИЛ ДОПУСТИМЫЙ ПРЕДЕЛ = ",-Loss);//выводим в комментарии что превысили допустимый убыток по советнику
Print("УБЫТОК СОВЕТНИКА ПРЕВЫСИЛ ДОПУСТИМЫЙ ПРЕДЕЛ = ",-Loss);//выводим в печать в журнале что превысили допустимый убыток по советнику
}*/
ClosePosBySizeLossInCurrency(Symbol(),-1,Magic,loss);//можно записать просто так, тогда в такой записи закроются все позиции в терминале у которых убыток
//в валюте депозита превысил некоторое значение но только текущего символа например EURUSD
//любое направление торговли, магик = Magic и если профит позиции<=-loss без доп.условий.
//просто выполняется роль стоплосса.
if (IsTesting())//для тестирования
{
if(bs==0)//если нет открытых позиций у советника
{
if (b==0) //если нет открытых позиций у советника на покупку
{
if (Takeprofit!=0)TP = NormalizeDouble(Ask + Takeprofit * Point,Digits);//вычисляем значение тейкпрофита на покупку
if (Stoploss!=0)SL = NormalizeDouble(Bid - Stoploss*Point,Digits);//вычисляем значение стоплосса на покупку
if (OrderSend(Symbol(),OP_BUY,Lot,NormalizeDouble(Ask,Digits),3, SL,TP,"тест",Magic,0,Blue)==-1) Print("Error OrderSend ",GetLastError());//открываем позицию на покупку
}
if (s==0) //если нет открытых позиций у советника на продажу
{
if (Takeprofit!=0)TP = NormalizeDouble(Bid - Takeprofit * Point,Digits);//вычисляем значение тейкпрофита на продажу
if (Stoploss!=0)SL = NormalizeDouble(Ask + Stoploss*Point,Digits); //вычисляем значение стоплосса на продажу
if (OrderSend(Symbol(),OP_SELL,Lot,NormalizeDouble(Bid,Digits),3,SL,TP,"тест",Magic,0,Red)==-1) Print("Error OrderSend ",GetLastError());//открываем позицию на продажу
}
}
}
}
if( если быдут выполнены эти прописанные условтя, тогда вызываем функцию)ClosePosBySizeLossInCurrency();
А стратегия совсем не интересна. Смотрите на сайте :https://cmillion.ru/
Обязательно что-то подберете.И пробуйте писать сами.
ssg