Вы такую конструкцию сами придумали, или где-то подсмотрели?
Уберите цикл и "будет вам счастье". :)))
А что ваша ТС предусматривает в случае только убыточных позиций? Надо быть реалистом.
Убыточная система также работает. Высчитывается баланс при условии проигрыша и сравнивается с ранее сохраненным.
Вот надо как то убрать всю эту байду и прописать без цикла... Кстати при удалении цикла программа не работает, как я и предполагал... Ребят помогите плиз составить корректно... Может функцию ордерпрофит использовать?
Предлагаю
double Pro = NormalizeDouble(AccountProfit()*100/AccountBalance(),2);
Условие сам составишь?
Если Pro в плюсе, имеем профит, в минусе убыток.
Можно так
if(Pro>=5)//имеем профит 5%
Прежде чем что-то програмить, надо представлять как вообще это все работает...
Функция OnTick отрабатывается при каждом тике. OnIinit только один раз при старте.
При этом за секунду может прийти несколько тиков. А если торговать по разным парам то и несколько десятков тиков.
Текущая прибыль по счету - это Equity. Так вот условие -
if (AccountEquty() - AccountBalance() > x ) CloseAll();
При этом будут учитываться свопы и комиссии всех открытых ордеров.
Примерная функция закрытия всех ордеров для исполнению по маркету:
CloseAll () { for (i=OrdersTotal()-1; i>=0; i--) { OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES); OrderClose(OrderTicket(),OrderLots(),0,0,CLR_NONE); } }
при исполнение Instant надо указывать цену закрытия. Ask или Bid.
CloseAll () { double priceclose =0; for (i=OrdersTotal()-1; i>=0; i--) { OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES); if (OrderType()==OP_SELL) priseclose = MarketInfo(OrderSymbol(),MODE_BID); if (OrderType()==OP_BUY) priceclose = MarketInfo(OrderSymbol(),MODE_ASK); OrderClose(OrderTicket(),OrderLots(),priseclose,0,CLR_NONE); } }
код я не проверял, но думаю смысл понятен
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Значит такая ситуация... Создал цикл проверки профита в виде:
while (true) // бесконечный цикл проверки профита
{
Sleep(1000); // проверяем профит каждую секунду
if ( AccountBalance() > AccountBalance_Old) //если текущий баланс больше ранее сохранёного
// баланса, значит получен профит
вот... Потом идет удаление ордеров... Профит получается результатом закрытия по ТэйкПрофиту одного из ордеров... Как можно заменить эту операцию? А то тестер стратегий зацикливается на данном этапе и не тестирует... Помогите пожалуйста!