Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 41 1...343536373839404142434445464748...2747 Новый комментарий Artyom Trishkin 2016.12.21 01:36 #401 Vitaly Muzichenko: Да, вы правы, просто код написан в таком стиле, что предыдущий оратор его не верно интерпретировал.А проверить?//+------------------------------------------------------------------+//| 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 parametersinput int Value=0; // Количество имеющихся ордеров//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+void OnStart() {//--- if(Value>0) Alert("1. Количество ордеров=",Value); else Alert("2. Это код после else"); { Alert("3. Ордера отсутствуют"); } }//+------------------------------------------------------------------+Код в фигурных скобках не относится к условию if-else, и будет выполняться всегда, независимо от значения в Value как обозначается в коде Вопросы от начинающих MQL5 Теория ускорения работы советника Vitaly Muzichenko 2016.12.21 01:45 #402 Artyom Trishkin: А проверить?Код в фигурных скобках не относится к условию if-else, и будет выполняться всегда, независимо от значения в Valueблин, действительно, сейчас снова пересмотрел оригинал кода, и был не прав. Стиль написания какой-то кривой - сбил меня с толку. Mickey Moose 2016.12.21 01:57 #403 Перепроверил, поубирал "лишнее"деление на ноль никуда не исчезло Файлы: zero.mq4 5 kb Vitaly Muzichenko 2016.12.21 02:07 #404 trader781: Перепроверил, поубирал "лишнее"деление на ноль никуда не исчезло Vitalie Postolache 2016.12.21 02:08 #405 trader781: Перепроверил, поубирал "лишнее"деление на ноль никуда не исчезло Потому что проверки нет, на то, чтобы делитель отличался от 0. Какоё смысл исполнять дальнейший код, когда ордеров нет и лоты 0? Vitaly Muzichenko 2016.12.21 02:11 #406 Поставьте проверкуvoid ModifyOrders() { 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("Ошибка функции модифицирования"); } } Вопросы от начинающих MQL5 Помогите решить Error 1 10 пунктов 3.mq4 Mickey Moose 2016.12.21 02:17 #407 Vitaly Muzichenko: Поставьте проверкуVitalie Postolache: А вот лоты упустил, спасибо. Vitaly Muzichenko 2016.12.21 02:21 #408 trader781: А вот лоты упустил, спасибо.Да то что упустили - это нормально, не нормально не читать журнал, там это всё написано, и написано в какой строке ошибка. Mickey Moose 2016.12.21 02:27 #409 Vitaly Muzichenko:Да то что упустили - это нормально, не нормально не читать журнал, там это всё написано.Я его и не собирался читать. Там написано "для проверки в маркете". Моих продуктов в маркете не будет никогда.по поводу деления на ноль.а как же то что выше? Он должен брать 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); Как правильно прописать OrderClose [Архив!] Напишу любого эксперта [ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой Vitaly Muzichenko 2016.12.21 02:31 #410 trader781: Я его и не собирался читать. Там написано "для проверки в маркете". Моих продуктов в маркете не будет никогда.Я о журнале в тестере Добавлено: Соберите код до нормального состояния, пересмотрите его, потом запустите в тестере и почитайте в журнале ошибки. Вы сюда даёте огрызки кода 1...343536373839404142434445464748...2747 Новый комментарий
Да, вы правы, просто код написан в таком стиле, что предыдущий оратор его не верно интерпретировал.
А проверить?
//| 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);
Я его и не собирался читать. Там написано "для проверки в маркете". Моих продуктов в маркете не будет никогда.
Я о журнале в тестере
Добавлено: Соберите код до нормального состояния, пересмотрите его, потом запустите в тестере и почитайте в журнале ошибки. Вы сюда даёте огрызки кода