Возникла неожиданная проблема с AccountProfit()

 

Проблема возникла при тестировании советника на бэк-тесте... задумывалось установить границу прибыли, после которой закрыть все ордера и остановить торги, но вот это условие не срабатывает..


extern double Profit_Target = 50;


if (AccountProfit() >= Profit_Target) CloseOrders();

void CloseOrders() {}


никак не могу найти причину, может кто сталкивался с такой проблемой?

Не судите строго, если глупый вопрос я только учусь.

 
Svairat >>:

Проблема возникла при тестировании советника на бэк-тесте... задумывалось установить границу прибыли, после которой закрыть все ордера и остановить торги, но вот это условие не срабатывает..


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("И все таки оно срабатывает");

...

}

 
Reshetov >>:

Мне неизвестно пока никого из здешних обитателей, обладающих телепатическими способностями. Поэтому, весьма сложно сказать по приведенному огрызку кода, где именно и что именно не срабатывает.


А посему попробуйте вот так:


extern double Profit_Target = 50;


if (AccountProfit() >= Profit_Target) CloseOrders();

void CloseOrders() {

Print("И все таки оно срабатывает");

...

}

Reshetov >>:

Мне неизвестно пока никого из здешних обитателей, обладающих телепатическими способностями. Поэтому, весьма сложно сказать по приведенному огрызку кода, где именно и что именно не срабатывает.


А посему попробуйте вот так:


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...

было добавлено условие чтобы советник не открывал ордера по достижению заданного профита, но он упорно продолжает молотить.

 
Svairat >>:


было добавлено условие чтобы советник не открывал ордера по достижению заданного профита, но он упорно продолжает молотить.


Ничего не понял. Причем тут "чтобы не открывал"? В Вашем вышеприведенном коде присутствуют только функции закрытия ордеров.

 

Все я разобрался... спс за помощь ) надо было удалить файл настроек..
 
Reshetov >>:

Ничего не понял. Причем тут "чтобы не открывал"? В Вашем вышеприведенном коде присутствуют только функции закрытия ордеров.

Извините что сразу не выложил полный код.. подумал этого будет достаточно выглядел он так


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 ее значение хранилось в файле конфигурации и не повлияло на смену ее значения в коде программы.

Наверно так.. по крайней мере удаление этого файла исправило ситуацию и вы были правы "И все таки оно срабатывает;" :)