Проблема возникла при тестировании советника на бэк-тесте...
задумывалось установить границу прибыли, после которой закрыть все
ордера и остановить торги, но вот это условие не срабатывает..
extern double Profit_Target = 50;
if (AccountProfit() >= Profit_Target) CloseOrders();
void CloseOrders() {}
никак не могу найти причину, может кто сталкивался с такой проблемой?
Не судите строго, если глупый вопрос я только учусь.
Мне неизвестно пока никого из здешних обитателей, обладающих телепатическими способностями. Поэтому, весьма сложно сказать по приведенному огрызку кода, где именно и что именно не срабатывает.
А посему попробуйте вот так:
extern double Profit_Target = 50;
if (AccountProfit() >= Profit_Target) CloseOrders();
void CloseOrders() {
Print("И все таки оно срабатывает");
...
}
Мне неизвестно пока никого из здешних обитателей, обладающих телепатическими способностями. Поэтому, весьма сложно сказать по приведенному огрызку кода, где именно и что именно не срабатывает.
А посему попробуйте вот так:
extern double Profit_Target = 50;
if (AccountProfit() >= Profit_Target) CloseOrders();
void CloseOrders() {
Print("И все таки оно срабатывает");
...
}
Мне неизвестно пока никого из здешних обитателей, обладающих телепатическими способностями. Поэтому, весьма сложно сказать по приведенному огрызку кода, где именно и что именно не срабатывает.
А посему попробуйте вот так:
extern double Profit_Target = 50;
if (AccountProfit() >= Profit_Target) CloseOrders();
void CloseOrders() {
Print("И все таки оно срабатывает");
...
}
extern double Profit_Target = 50;
if (AccountProfit() >= Profit_Target) CloseOrders();
void CloseOrders()
{
int total = OrdersTotal();
int CloseSlip = 100; //slip to use when trying to close trades
bool result;
int orderType;
for (int i=total-1;i>=0;i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES );
if (MagicNumber==0 || OrderMagicNumber()==MagicNumber )
{
orderType = OrderType();
result = false;
if (orderType == OP_BUY)
{
result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), CloseSlip, Red );
}
else if (orderType == OP_SELL)
{
result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), CloseSlip, Red );
}
}
}
return(0);
}
Вот полный.. но факт в том что не срабатывает само условие - if (AccountProfit() >= Profit_Target)
Начальный депозит был 3000...
было добавлено условие чтобы советник не открывал ордера по достижению заданного профита, но он упорно продолжает молотить.
Ничего не понял. Причем тут "чтобы не открывал"? В Вашем вышеприведенном коде присутствуют только функции закрытия ордеров.
Извините что сразу не выложил полный код.. подумал этого будет достаточно выглядел он так
extern double Profit_Target = 50;
extern bool ProfitTarget=true;
bool NextDay=false,
NextDayTmp=true;
if (ProfitTarget && NextDayTmp)
{
if (AccountProfit()>=Profit_Target)
{
NextDay=true;
NextDayTmp=false;
Day_Of_Week=DayOfWeek();
CloseOrders();
}
}
if(NextDay){
if(Day_Of_Week==DayOfWeek()){
return(0);
}
else {
NextDay=false;
NextDayTmp=true;
}
}
Вот было так... Переменной ProfitTarget было снача присвоино значение false... потом после нескольких тестов поменял в программе на true, откомпилировал и запустил на тест... после чего условие AccountProfit()>=Profit_Target не сработало.
Из-за того что переменная ProfitTarget была объявлена как extern ее значение хранилось в файле конфигурации и не повлияло на смену ее значения в коде программы.
Наверно так.. по крайней мере удаление этого файла исправило ситуацию и вы были правы "И все таки оно срабатывает;" :)
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Проблема возникла при тестировании советника на бэк-тесте... задумывалось установить границу прибыли, после которой закрыть все ордера и остановить торги, но вот это условие не срабатывает..
extern double Profit_Target = 50;
if (AccountProfit() >= Profit_Target) CloseOrders();
void CloseOrders() {}
никак не могу найти причину, может кто сталкивался с такой проблемой?
Не судите строго, если глупый вопрос я только учусь.