Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 41
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Да, вы правы, просто код написан в таком стиле, что предыдущий оратор его не верно интерпретировал.
А проверить?
//| TestLogics.mq4 |
//| Copyright 2016, Artem A. Trishkin, Skype artmedia70 |
//| https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Artem A. Trishkin, Skype artmedia70"
#property link "https://login.mql5.com/ru/users/artmedia70"
#property version "1.00"
#property strict
#property script_show_inputs
//--- input parameters
input int Value=0; // Количество имеющихся ордеров
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//---
if(Value>0) Alert("1. Количество ордеров=",Value);
else Alert("2. Это код после else");
{
Alert("3. Ордера отсутствуют");
}
}
//+------------------------------------------------------------------+
А проверить?
блин, действительно, сейчас снова пересмотрел оригинал кода, и был не прав. Стиль написания какой-то кривой - сбил меня с толку.
Перепроверил, поубирал "лишнее"
деление на ноль никуда не исчезло
Перепроверил, поубирал "лишнее"
деление на ноль никуда не исчезло
Перепроверил, поубирал "лишнее"
деление на ноль никуда не исчезло
Потому что проверки нет, на то, чтобы делитель отличался от 0. Какоё смысл исполнять дальнейший код, когда ордеров нет и лоты 0?
Поставьте проверку
{
double avg_price=0;
price=0;
bool z=true;
double orderlots=0;
for(i=OrdersTotal()-1; i>=0; i--)
{
if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) && (OrderSymbol()==Symbol())
&& (OrderMagicNumber()==Magic) && (OrderType()==FindLastOType()))
{
price+=OrderOpenPrice()*OrderLots();
orderlots+=OrderLots();
}
}
if(orderlots==0) { return; } // если ничего нет - выходим
avg_price=NormalizeDouble(price / orderlots,Digits);
if(FindLastOType()==OP_BUY) tp=NormalizeDouble(avg_price+TakeProfit*Point(),Digits);
if(FindLastOType()==OP_SELL) tp=NormalizeDouble(avg_price-TakeProfit*Point(),Digits);
for(i=OrdersTotal()-1; i>=0; i--)
{
if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) && (OrderSymbol()==Symbol())
&& (OrderMagicNumber()==Magic) &&(OrderType()==FindLastOType()))
z=OrderModify(OrderTicket(),OrderOpenPrice(),0,tp,0);
if (!z)
Print("Ошибка функции модифицирования");
}
}
Поставьте проверку
А вот лоты упустил, спасибо.
Да то что упустили - это нормально, не нормально не читать журнал, там это всё написано.
Я его и не собирался читать. Там написано "для проверки в маркете". Моих продуктов в маркете не будет никогда.
по поводу деления на ноль.
а как же то что выше? Он должен брать orderlots оттуда
{
price+=OrderOpenPrice()*OrderLots();
orderlots+=OrderLots();
}
}
if(orderlots==0) { return; } // если ничего нет - выходим
avg_price=NormalizeDouble(price / orderlots,Digits);
if(FindLastOType()==OP_BUY) tp=NormalizeDouble(avg_price+TakeProfit*Point(),Digits);
if(FindLastOType()==OP_SELL) tp=NormalizeDouble(avg_price-TakeProfit*Point(),Digits);
Я его и не собирался читать. Там написано "для проверки в маркете". Моих продуктов в маркете не будет никогда.
Я о журнале в тестере
Добавлено: Соберите код до нормального состояния, пересмотрите его, потом запустите в тестере и почитайте в журнале ошибки. Вы сюда даёте огрызки кода