Помощь в кодировании - страница 290

 
mladen:
Это просто:

Поместите что-то вроде этого в начало процедуры start() вашего советника, и это предотвратит его работу, если убыток (или прибыль), уже полученный в этот день, превысит некоторую сумму:

double totalProfit=0;

for (int i =OrdersHistoryTotal()-1; i>=0; i--)

{

if (!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continue;

if (OrderSymbol() != Symbol()) continue;

if (OrderMagicNumber() != someMagicNumber) continue;

if (iBarShift(Symbol(),PERIOD_D1,OrderCloseTime())==0)

if (OrderType()==OP_BUY || OrderType()==OP_SELL)

totalProfit += OrderProfit()+OrderCommission()+OrderSwap();

}

if (totalProfit < someProfitLossLimit) return(0);

[/PHP]

Уважаемый господин MLADEN....

Большое спасибо за вышеуказанные коды.... IOU 2 кредита.....

[PHP]

double totalProfit=0;

for (int i =OrdersHistoryTotal()-1; i>=0; i--)

{

if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;

if (OrderSymbol() == Symbol()) continue;

if (OrderMagicNumber() == someMagicNumber) continue;

if (iBarShift(Symbol(),PERIOD_D1,OrderCloseTime())==0)

if (OrderType()==OP_BUY || OrderType()==OP_SELL)

totalProfit += OrderProfit()+OrderCommission()+OrderSwap();

}

if (totalProfit < someProfitLossLimit) return(0);

Просто для проверки..... будет ли этот код предотвращать любые другие ордера от определенной валютной пары и MagicNumber.... если сегодняшний ACCUMULATED LOSS превышает someProfitLossLimit....

Спасибо за очень-очень быстрый ответ....

наилучшие пожелания

AZRUL...

 
12BPRO:
Уважаемый господин MLADEN....

СПАСИБО БОЛЬШОЕ за вышеуказанные коды.... IOU 2 кредита.....

double totalProfit=0;

for (int i =OrdersHistoryTotal()-1; i>=0; i--)

{

if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;

if (OrderSymbol() == Symbol()) continue;

if (OrderMagicNumber() == someMagicNumber) continue;

if (iBarShift(Symbol(),PERIOD_D1,OrderCloseTime())==0)

if (OrderType()==OP_BUY || OrderType()==OP_SELL)

totalProfit += OrderProfit()+OrderCommission()+OrderSwap();

}

if (totalProfit < someProfitLossLimit) return(0);

[/PHP]

Just to check..... will this code prevent any more orders from a specific currency pair and MagicNumber.... if today's ACCUMULATED LOSS exceed someProfitLossLimit....

Thanks for the very-very fast reply....

best regrads

AZRUL...

Да

Это предотвратит дальнейшую обработку кода, если накопленная прибыль закрытых ордеров меньше некоторой суммы. Вы можете заменить последнюю строку на эту :

[PHP]if (totalProfit < 0 && totalProfit < someProfitLossLimit) return(0);

Чтобы убедиться, что это делается только в тех случаях, когда накопленная "прибыль" отрицательна (когда были убытки)

 
mladen:
Да

Это предотвратит дальнейшую обработку кода, если накопленная прибыль закрытых ордеров меньше некоторой суммы. Вы можете заменить последнюю строку на следующую:

if (totalProfit < 0 && totalProfit < someProfitLossLimit) return(0);
Чтобы убедиться, что это делается только в тех случаях, когда суммарная "прибыль" отрицательна (когда были проигрыши)

Dear Sir MLADEN...

So Sorry Sir... Я думаю, что я не достаточно ясно объяснил для вас......

Мое намерение состоит в том, что код для отслеживания накопленного убытка только для конкретной валютной пары и MagicNumber..... Не включая прибыль, которую он приносит... только убытки считаются...

ИЗВИНИТЕ ЗА ПУТАНИЦУ...

С наилучшими пожеланиями...

AZRUL...

 
12BPRO:
Уважаемый сэр MLADEN...

Простите, сэр... Я думаю, что я не достаточно ясно объяснил для вас.....

Мое намерение состоит в том, что код для отслеживания накопленного убытка только для конкретной валютной пары и MagicNumber..... Не включая прибыль, которую он приносит... только убытки считаются...

ИЗВИНИТЕ ЗА ПУТАНИЦУ...

С наилучшими пожеланиями...

АЗРУЛ...

AZRUL

Прибыль может быть отрицательной (==убыток) В закрытом списке otrders есть файл Order() profit, который сохраняет "прибыль": положительную для выигрышных ордеров и отрицательную для проигрышных сделок. Этот код делает именно то, что вам нужно

 

Уважаемый господин МЛАДЕН,

Теория заключается в следующем.... если сегодня случится так, что рынок будет SIDEWAY, я в конечном итоге потеряю часть прибыли (если таковая имеется), которая была сделана и X$ РИСК на мой капитал..... Это не защита от очень плохого торгового дня......

Причина в том, что я готов рисковать на X$ в день от сегодняшней торговли.....

Вышеуказанные коды съедят всю прибыль (если таковая имеется) за день, плюс это также съест мой РИСК (капитал)...

СПАСИБО

С наилучшими пожеланиями...

AZRUL...

 
mladen:
AZRUL Прибыль может быть отрицательной (==убыток) В закрытом списке otrders есть файл Order() profit, который сохраняет "прибыль": положительную для выигрышных ордеров и отрицательную для проигрышных сделок. Этот код делает именно то, что вам нужно

Уважаемый господин МЛАДЕН...

Спасибо, что просветили меня по поводу вышеупомянутого предложения...

Я постараюсь найти любой результат.....

с наилучшими пожеланиями

AZRUL...

 

Уважаемый господин МЛАДЕН,

Подойдут ли следующие коды...

Следить за накопленным убытком только для конкретной валютной пары и MagicNumber..... Не включая прибыль, которую он приносит... Считается только убыток...

extern double LossAmount = -500.00

...............

int start()

if(LossRisk()<=LossAmount)

return(0);

...............

void LossRisk()

double totalLoss=0;

{

for (int i =OrdersHistoryTotal()-1; i>=0; i--)

{

if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;

if (OrderSymbol() == Symbol()) continue;

if (OrderMagicNumber() == someMagicNumber) continue;

if (iBarShift(Symbol(),PERIOD_D1,OrderCloseTime())==0)

if (OrderType()==OP_BUY || OrderType()==OP_SELL)

totalLoss -= OrderProfit()+OrderCommission()+OrderSwap();

}

return(totalLoss);

}

Ваши знания будут высоко оценены...

искренне ваш

AZRUL....

 
12BPRO:
Уважаемый господин МЛАДЕН,

Помогут ли следующие коды...

Следить за накопленным убытком только для конкретной валютной пары и MagicNumber..... Не включая прибыль, которую он получает... Считается только убыток...

extern double LossAmount = -500.00

...............

int start()

if(LossRisk()<=LossAmount)

return(0);

...............

void LossRisk()

double totalLoss=0;

{

for (int i =OrdersHistoryTotal()-1; i>=0; i--)

{

if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;

if (OrderSymbol() == Symbol()) continue;

if (OrderMagicNumber() == someMagicNumber) continue;

if (iBarShift(Symbol(),PERIOD_D1,OrderCloseTime())==0)

if (OrderType()==OP_BUY || OrderType()==OP_SELL)

totalLoss -= OrderProfit()+OrderCommission()+OrderSwap();

}

return(totalLoss);

}

[/PHP]

Your Knowledge is highly appreciated...

yours truly

AZRUL....

Нет, не будет

Если вы хотите сложить только убытки, вам нужно добавить

&& (OrderProfit()+OrderCommission()+OrderSwap()<0)

Таким образом, функция будет выглядеть следующим образом :

[PHP]void LossRisk()

double totalLoss=0;

{

for (int i =OrdersHistoryTotal()-1; i>=0; i--)

{

if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;

if (OrderSymbol() == Symbol()) continue;

if (OrderMagicNumber() == someMagicNumber) continue;

if (iBarShift(Symbol(),PERIOD_D1,OrderCloseTime())==0)

if (OrderType()==OP_BUY || OrderType()==OP_SELL && (OrderProfit()+OrderCommission()+OrderSwap())<0)

totalLoss += OrderProfit()+OrderCommission()+OrderSwap();

}

return(totalLoss);

}

 

Уважаемый господин MLADEN....

В настоящее время я использую эти коды в своем советнике, который работает на таймфрейме M15...

Он открывает новый ордер после таймфрейма M15...

bool AddP()

{int _num=0; int _ot=0;

for (int j=0;j<OrdersTotal();j++)

{if(OrderSelect(j,SELECT_BY_POS)==true && OrderSymbol()==Symbol() && OrderType()<3 && ((OrderMagicNumber()==Magic) || Magic==0))

{

_num++;if(OrderOpenTime()>_ot) _ot=OrderOpenTime();

}

}

if(_num==0) return(true);

if(_num>0 && ((Time[0]-_ot))>0)

return(true);

else return(false);

}

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

хотя я нахожусь на таймфрейме M15....

НАДЕЮСЬ, ВЫ НЕ ОБИДИТЕСЬ, ЕСЛИ Я ОТПРАВЛЮ ВАМ СТОЛЬКО ВОПРОСОВ....

с наилучшими пожеланиями

AZRUL...

 
mladen:
Нет, не будет

Если вы хотите суммировать только проигрыши, вы должны добавить

&& (OrderProfit()+OrderCommission()+OrderSwap()<0)

Таким образом, функция будет выглядеть следующим образом:

void LossRisk()

double totalLoss=0;

{

for (int i =OrdersHistoryTotal()-1; i>=0; i--)

{

if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;

if (OrderSymbol() == Symbol()) continue;

if (OrderMagicNumber() == someMagicNumber) continue;

if (iBarShift(Symbol(),PERIOD_D1,OrderCloseTime())==0)

if (OrderType()==OP_BUY || OrderType()==OP_SELL && (OrderProfit()+OrderCommission()+OrderSwap())<0)

totalLoss += OrderProfit()+OrderCommission()+OrderSwap();

}

return(totalLoss);

}

Уважаемый сэр МЛАДЕН,

Вы действительно знаете, как сделать так, чтобы все было сделано здесь....

Я ОЧЕНЬ-ОЧЕНЬ РАД получить от вас ответ, сэр....

Напишите мне, если есть что-нибудь, что я мог бы сделать взамен... кроме кодирования....

Спасибо

С наилучшими пожеланиями

AZRUL...