Ничего не получается!!! Опишу свою задачу: есть открытый ордер, если он закроется в минус мне нужно сразу же открыть противоположный ордер с лотом в 2 раза больше чем у предыдущего, стоп лосс должен быть на уровне открытия предыдущего а тейк равен стоп лоссу... Вот то что я намудрил, объясните почему ОНО не работает?!!!
bool MartinOrder(){
datetime t=0;
{
for(int i=0; i<=OrdersHistoryTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY)
{
if(OrderMagicNumber()==Magic1)
{
if(OrderProfit()<0)
{
if(t<OrderCloseTime())
t=OrderCloseTime();return(t);
{
if(t==OrderCloseTime())
if(OrderSend(NULL,OP_SELL,(OrderLots()*2),Bid,Slippage,OrderOpenPrice(),(Bid-(OrderOpenPrice()-Bid)),"MartinSell",Magic3,0,Red))
Print("MartinSell");
}
}
}
}
}
}
}
}
return(true);
}
А что вы предпринимаете, чтобы открывался один ордер, а не пачка?
я до этого еще не дошел)) у меня вообще ничего не открывается!!! Скорее всего буду по магику (Magic3) проверять на наличие...
Ошибки в вашей функции. Посмотрите как сделано у KimIV. Я давал вам функцию. У него сначала находится индекс(порядковый номер в списке закрытых ордеров) последней закрытой позиции. А потом уже по этому индексу выбирается этот ордер и у него проверяется if (OrderProfit()<0).
И не понятно зачем вы воткнули return(t); Функции типа bool будет возвращаться время и далее код выполняться не будет.
Ошибки в вашей функции. Посмотрите как сделано у KimIV. Я давал вам функцию. У него сначала находится индекс(порядковый номер в списке закрытых ордеров) последней закрытой позиции. А потом уже по этому индексу выбирается этот ордер и у него проверяется if (OrderProfit()<0).
И не понятно зачем вы воткнули return(t); Функции типа bool будет возвращаться время и далее код выполняться не будет.
Тоже правильно, спасибо щас еще попробую...
Там вместо return(t); наверно нужно continue; поставить...
Если хотите получить быстрый результат, используйте готовые функции KimIV. Лично я все эксперты строю на его функциях, подключаю к эксперту все его библиотеки и конструирую эксперт из кубиков-функций. Свою функцию делаю только, если такой не находится в библиотеках KimIV. Это здорово экономит время. А время вам понадобится. Чтобы найти работающую идею, придётся перелопачивать их большое количество. Если вы используете стоплоссы и тейкпрофиты в вашем случае можно использовать функции KimIV.
// isCloseLastPosByStop Флаг закрытия последней позиции по стопу
// isCloseLastPosByTake Флаг закрытия последней позиции по тейку
Во первых, у вас полный бардак со скобками.
Во вторых - одного меджика более чем достаточно для решения вашей задачи.
Если не сильны в программировании - попробуйте написать логику по шагам на русском, многое станет понятно.
Во первых, у вас полный бардак со скобками.
Во вторых - одного меджика более чем достаточно для решения вашей задачи.
Если не сильны в программировании - попробуйте написать логику по шагам на русском, многое станет понятно.
В данной ситуации может и достаточно, но если смотреть на весь советник то нет, не хватит...
А что со собками то не так?))
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Ничего не получается!!! Опишу свою задачу: есть открытый ордер, если он закроется в минус мне нужно сразу же открыть противоположный ордер с лотом в 2 раза больше чем у предыдущего, стоп лосс должен быть на уровне открытия предыдущего а тейк равен стоп лоссу... Вот то что я намудрил, объясните почему ОНО не работает?!!!
bool MartinOrder(){
datetime t=0;
{
for(int i=0; i<=OrdersHistoryTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY)
{
if(OrderMagicNumber()==Magic1)
{
if(OrderProfit()<0)
{
if(t<OrderCloseTime())
t=OrderCloseTime();return(t);
{
if(t==OrderCloseTime())
if(OrderSend(NULL,OP_SELL,(OrderLots()*2),Bid,Slippage,OrderOpenPrice(),(Bid-(OrderOpenPrice()-Bid)),"MartinSell",Magic3,0,Red))
Print("MartinSell");
}
}
}
}
}
}
}
}
return(true);
}