Logo

Вход

Войти с помощью соц. сетей
Пока нет объявлений.
X
 
  • Фильтр
  • Время
  • Показать
Очистить всё
новые сообщения
ТОП СООБЩЕНИЙ
12.02.2020, 20:18
Лучший ответ
Выплачено: 69915 RUB
Сообщение от Лягушка Посмотреть сообщение
MQL код:
int Open_Ord(int Tip)
{
int Ticket;
double StopLoss,TP, M, N; // StopLoss (относит.знач.цены)
double Lot, Dep, Min_Lot; // Переменные
double Price_prev=0; // Предыдущая цена
bool Order;
//-------------------------Установка первого ордера Buy----------------------------
while(Order==false && Mas_Tip[Tip]==0) // До тех пор, пока ..
{ //.. не достигнут успех
Order=false;
if (Tip==0) // Будем открывать Buy
{
TP=NormalizeDouble((Ask+TakeProfit*Point),_Digits) ;
StopLoss=NormalizeDouble((Ask-StopL*Point),_Digits); // StopLoss (цена)
Min_Lot=MarketInfo(_Symbol,MODE_MINLOT);
Dep=Depo*((1-KDep)/(1-MathPow(KDep,Open_Ord)));
M=MarketInfo(Symbol(),MODE_TICKVALUE);
N=MarketInfo(Symbol(),MODE_TICKSIZE);
Lot=NormalizeDouble((Dep/((Ask-StopLoss)/N*M)),2);
if(Lot<Min_Lot)
{
Lot=Min_Lot;
}
ObjectCreate("Original3",OBJ_LABEL,0,0,0);
ObjectSetText("Original3","t/p по символу="+DoubleToStr(TakeProfit,4),10,"Arial Bold",Red);
ObjectSet("Original3",OBJPROP_CORNER,0);
ObjectSet("Original3",OBJPROP_XDISTANCE,300);
ObjectSet("Original3",OBJPROP_YDISTANCE,40);

Ticket=OrderSend(Symbol(),0,Lot,Ask,MarketInfo(_Sy mbol,MODE_STOPLEVEL),StopLoss,TP,"NULL",Magic,0,cl rRed);
if(Ticket>0)
{
Order=true;
}
if(Ticket<0)
{
if(Errors(GetLastError())==false)
return(0);
}
}
if (Tip==1) // Будем открывать Sell
{
TP=NormalizeDouble((Bid-TakeProfit*Point),_Digits);
StopLoss=NormalizeDouble((Bid+StopL*Point),_Digits ); // StopLoss (цена)
Min_Lot=MarketInfo(_Symbol,MODE_MINLOT);
Dep=Depo*((1-KDep)/(1-MathPow(KDep,Open_Ord)));
M=MarketInfo(Symbol(),MODE_TICKVALUE);
N=MarketInfo(Symbol(),MODE_TICKSIZE);
Lot=NormalizeDouble((Dep/((StopLoss-Bid)/N*M)),2);
if(Lot<Min_Lot)
{
Lot=Min_Lot;
}
ObjectCreate("Original3",OBJ_LABEL,0,0,0);
ObjectSetText("Original3","t/p по символу="+DoubleToStr(Lot,4),10,"Arial Bold",Red);
ObjectSet("Original3",OBJPROP_CORNER,0);
ObjectSet("Original3",OBJPROP_XDISTANCE,300);
ObjectSet("Original3",OBJPROP_YDISTANCE,40);

Ticket=OrderSend(Symbol(),1,Lot,Bid,MarketInfo(_Sy mbol,MODE_STOPLEVEL),StopLoss,TP,"NULL",Magic,0,cl rRed);
if(Ticket>0)
{
Order=true;
}
if(Ticket<0)
{
if(Errors(GetLastError())==false)
return(0);
}
}
Terminal(); // Функция учёта ордеров `
}
return(Ticket);
}
Если не сосредотачиваться на всей этой пурге, то начни с внимательного прочтения и сравнения своего кода и текста справки:
Итак Справка:
Код:
int  OrderSend( 
   string   symbol,              // символ 
   int      cmd,                    // торговая операция 
   double   volume,            // количество лотов 
   double   price,                // цена 
   int      slippage,              // проскальзывание 
   double   stoploss,            // stop loss 
   double   takeprofit,          // take profit 
   string   comment=NULL,        // комментарий 
   int      magic=0,             // идентификатор 
   datetime expiration=0,        // срок истечения ордера 
   color    arrow_color=clrNONE  // цвет 
   );
И твой вариант:
Код:
            Ticket = OrderSend(
                       Symbol(),
                       0,
                       Lot,
                       Ask,
                       MarketInfo(_Symbol,MODE_STOPLEVEL),  // ?
                       StopLoss,
                       TP,
                       "NULL",
                       Magic,
                       0,
                       clrRed
                     );
Ну и посмотри, соответствует ли то, что ты опубликовал, тому, что ты хотел опубликовать. И на будущее учти глюки форума.
12.02.2020, 20:23
Лучший ответ
Выплачено: 95364 RUB
Сообщение от Лягушка Посмотреть сообщение
В чем может быть проблема?
С большего, что бросилось в глаза..
MQL код:
        if(Lot
{

Lot=Min_Lot;

}

1. Непонятная конструкция с лотом, а также со скобками круглыми и фигурными....
MQL код:
 Lot=NormalizeDouble((Dep/((Ask-StopLoss)/N*M)),2);

2. Вычисление лота под вопросом, так как в данной функции непонятно чему равны переменные "М" и "N", так как данные переменные просто объявлены в данной функции и только.
3. Ask и Bid не нормализован при отправке на сервер.
4. Непонятно для чего нужно вот это..
Mas_Tip[Tip]==0
MQL код:
 while(Order==false && Mas_Tip[Tip]==0) 

5.
MQL код:
DoubleToStr(TakeProfit,4)

TakeProfit принадлежит к переменной интегер, а выводишь на чарт с 4 нулями, для чего??
12.02.2020, 20:29
Лучший ответ
Выплачено: 550 RUB
дело в том что по этому коду ордера в одну сторону выставляет корректно, но если они не закрыты и появляется сигнал для противоположных ордеров выдает ошибку. я в код вписал строки чтоб выводило значение параметра на экран. например если стоят ордера покупать и бай лимит то при попытке выставить селл в журнале появляется ошибка 130 а на экран выводит вместо заданного значения тейкпрофит значение просто 1. TakeProfit который выводит на экран это значение внешней переменной. На форум вообще робота можно скинуть? Если я пропишу показ внешнего тп сможете ответить?
12.02.2020, 20:37
Лучший ответ
Выплачено: 69915 RUB
Сообщение от Лягушка Посмотреть сообщение
стоят ордера покупать и бай лимит
Не знаю, где у тебя байлимиты стоят, в функции открываются только рыночные ордера: OP_BUY - "0" OP_SELL - "1" ;
12.02.2020, 20:38
Лучший ответ
Выплачено: 95364 RUB
Сообщение от Лягушка Посмотреть сообщение
а вот тейк профит передает значение 1. Соответственно тейк выставить не может, так как слишком близко к цене
И где эта передача, опять говорим не о чем
И вообще, тупое копирование какого то кода ничего вам не даст в плане развития. Только руками переписали и моторика рук помогает голове запомнить что к чему..
Сообщение от Лягушка Посмотреть сообщение
дело в том что по этому коду ордера в одну сторону выставляет корректно,
Про корректность я бы пока не говорил..
12.02.2020, 20:53
Лучший ответ
Выплачено: 550 RUB
да суть не в лимитах. просто раньше все работало, обновилась винда обновился мт и при повторной компеляции внешнюю переменную TakeProfit один раз передает корректно, но если ордера еще открыты и надо открыть встречный вместо заданного значения приходит цифра 1. проверял значения стоп лосс он как внешняя переменная передается нормально
  • #1 Свернуть

    Проблема с кодом

    Здравствуйте. Написал сеточного советника. Изначально по осциллятору выставлялись сетка и покупки и продажи на встречу по сигналу. После обновления МТ при новой компиляции советника, советник почему-то не корректно передает значение внешней переменной в блок вычислений установки ордеров. При установке сетки на покупку все нормально выставляется, но если сделки еще не закрыты, то встречную сетку не может выставить, выдает ошибку 130. Проверил значения вычислений и получил результат, что стоп лосс вычисляет правильно и из внешней переменной передается верно, а вот тейк профит передает значение 1. Соответственно тейк выставить не может, так как слишком близко к цене. В чем может быть проблема?
  • <a href="https://www.instaforex.org/ru/?x=ruforum">InstaForex</a>
  • #2 Свернуть

    Сообщение от Лягушка Посмотреть сообщение
    В чем может быть проблема?
    Обрати внимание на переменные int и double, а также на нормализацию цены. Но эт разговор ни о чем. Как понимаешь, "ванговать" без кода можно до посинения.
    " Мы можем видеть то, что случится в будущем, по событиям прошлого, если знаем, как смотреть". В. Сперандео.
    Мы называем процессы случайными... до тех пор, пока не установим их закономерности.

    Комментарий

    • #3 Свернуть

      Сообщение от Лягушка Посмотреть сообщение
      Здравствуйте. Написал сеточного советника. Изначально по осциллятору выставлялись сетка и покупки и продажи на встречу по сигналу. После обновления МТ при новой компиляции советника, советник почему-то не корректно передает значение внешней переменной в блок вычислений установки ордеров. При установке сетки на покупку все нормально выставляется, но если сделки еще не закрыты, то встречную сетку не может выставить, выдает ошибку 130. Проверил значения вычислений и получил результат, что стоп лосс вычисляет правильно и из внешней переменной передается верно, а вот тейк профит передает значение 1. Соответственно тейк выставить не может, так как слишком близко к цене. В чем может быть проблема?
      В отсутствии проверки минимальной дистанции установки стоп/тэйк-ордеров. Не мешало бы её, дистанцию, проверять перед тем, как что то в рынок нахлобучивать.
      Следующий раз, когда спич воять будешь, ты уточняй, для пятерки или четверки тужишься.

      Комментарий

      • #4 Свернуть

        MQL код:
        int Open_Ord(int Tip)
        {
        int Ticket;
        double StopLoss,TP, M, N; // StopLoss (относит.знач.цены)
        double Lot, Dep, Min_Lot; // Переменные
        double Price_prev=0; // Предыдущая цена
        bool Order;
        //-------------------------Установка первого ордера Buy----------------------------
        while(Order==false && Mas_Tip[Tip]==0) // До тех пор, пока ..
        { //.. не достигнут успех
        Order=false;
        if (Tip==0) // Будем открывать Buy
        {
        TP=NormalizeDouble((Ask+TakeProfit*Point),_Digits) ;
        StopLoss=NormalizeDouble((Ask-StopL*Point),_Digits); // StopLoss (цена)
        Min_Lot=MarketInfo(_Symbol,MODE_MINLOT);
        Dep=Depo*((1-KDep)/(1-MathPow(KDep,Open_Ord)));
        M=MarketInfo(Symbol(),MODE_TICKVALUE);
        N=MarketInfo(Symbol(),MODE_TICKSIZE);
        Lot=NormalizeDouble((Dep/((Ask-StopLoss)/N*M)),2);
        if(Lot<Min_Lot)
        {
        Lot=Min_Lot;
        }
        ObjectCreate("Original3",OBJ_LABEL,0,0,0);
        ObjectSetText("Original3","t/p по символу="+DoubleToStr(TakeProfit,4),10,"Arial Bold",Red);
        ObjectSet("Original3",OBJPROP_CORNER,0);
        ObjectSet("Original3",OBJPROP_XDISTANCE,300);
        ObjectSet("Original3",OBJPROP_YDISTANCE,40);

        Ticket=OrderSend(Symbol(),0,Lot,Ask,MarketInfo(_Sy mbol,MODE_STOPLEVEL),StopLoss,TP,"NULL",Magic,0,cl rRed);
        if(Ticket>0)
        {
        Order=true;
        }
        if(Ticket<0)
        {
        if(Errors(GetLastError())==false)
        return(0);
        }
        }
        if (Tip==1) // Будем открывать Sell
        {
        TP=NormalizeDouble((Bid-TakeProfit*Point),_Digits);
        StopLoss=NormalizeDouble((Bid+StopL*Point),_Digits ); // StopLoss (цена)
        Min_Lot=MarketInfo(_Symbol,MODE_MINLOT);
        Dep=Depo*((1-KDep)/(1-MathPow(KDep,Open_Ord)));
        M=MarketInfo(Symbol(),MODE_TICKVALUE);
        N=MarketInfo(Symbol(),MODE_TICKSIZE);
        Lot=NormalizeDouble((Dep/((StopLoss-Bid)/N*M)),2);
        if(Lot<Min_Lot)
        {
        Lot=Min_Lot;
        }
        ObjectCreate("Original3",OBJ_LABEL,0,0,0);
        ObjectSetText("Original3","t/p по символу="+DoubleToStr(Lot,4),10,"Arial Bold",Red);
        ObjectSet("Original3",OBJPROP_CORNER,0);
        ObjectSet("Original3",OBJPROP_XDISTANCE,300);
        ObjectSet("Original3",OBJPROP_YDISTANCE,40);

        Ticket=OrderSend(Symbol(),1,Lot,Bid,MarketInfo(_Sy mbol,MODE_STOPLEVEL),StopLoss,TP,"NULL",Magic,0,cl rRed);
        if(Ticket>0)
        {
        Order=true;
        }
        if(Ticket<0)
        {
        if(Errors(GetLastError())==false)
        return(0);
        }
        }
        Terminal(); // Функция учёта ордеров `
        }
        return(Ticket);
        }

        Комментарий

        • #5 Свернуть

          Сообщение от Лягушка Посмотреть сообщение
          MQL код:
          int Open_Ord(int Tip)
          {
          int Ticket;
          double StopLoss,TP, M, N; // StopLoss (относит.знач.цены)
          double Lot, Dep, Min_Lot; // Переменные
          double Price_prev=0; // Предыдущая цена
          bool Order;
          //-------------------------Установка первого ордера Buy----------------------------
          while(Order==false && Mas_Tip[Tip]==0) // До тех пор, пока ..
          { //.. не достигнут успех
          Order=false;
          if (Tip==0) // Будем открывать Buy
          {
          TP=NormalizeDouble((Ask+TakeProfit*Point),_Digits) ;
          StopLoss=NormalizeDouble((Ask-StopL*Point),_Digits); // StopLoss (цена)
          Min_Lot=MarketInfo(_Symbol,MODE_MINLOT);
          Dep=Depo*((1-KDep)/(1-MathPow(KDep,Open_Ord)));
          M=MarketInfo(Symbol(),MODE_TICKVALUE);
          N=MarketInfo(Symbol(),MODE_TICKSIZE);
          Lot=NormalizeDouble((Dep/((Ask-StopLoss)/N*M)),2);
          if(Lot<Min_Lot)
          {
          Lot=Min_Lot;
          }
          ObjectCreate("Original3",OBJ_LABEL,0,0,0);
          ObjectSetText("Original3","t/p по символу="+DoubleToStr(TakeProfit,4),10,"Arial Bold",Red);
          ObjectSet("Original3",OBJPROP_CORNER,0);
          ObjectSet("Original3",OBJPROP_XDISTANCE,300);
          ObjectSet("Original3",OBJPROP_YDISTANCE,40);

          Ticket=OrderSend(Symbol(),0,Lot,Ask,MarketInfo(_Sy mbol,MODE_STOPLEVEL),StopLoss,TP,"NULL",Magic,0,cl rRed);
          if(Ticket>0)
          {
          Order=true;
          }
          if(Ticket<0)
          {
          if(Errors(GetLastError())==false)
          return(0);
          }
          }
          if (Tip==1) // Будем открывать Sell
          {
          TP=NormalizeDouble((Bid-TakeProfit*Point),_Digits);
          StopLoss=NormalizeDouble((Bid+StopL*Point),_Digits ); // StopLoss (цена)
          Min_Lot=MarketInfo(_Symbol,MODE_MINLOT);
          Dep=Depo*((1-KDep)/(1-MathPow(KDep,Open_Ord)));
          M=MarketInfo(Symbol(),MODE_TICKVALUE);
          N=MarketInfo(Symbol(),MODE_TICKSIZE);
          Lot=NormalizeDouble((Dep/((StopLoss-Bid)/N*M)),2);
          if(Lot<Min_Lot)
          {
          Lot=Min_Lot;
          }
          ObjectCreate("Original3",OBJ_LABEL,0,0,0);
          ObjectSetText("Original3","t/p по символу="+DoubleToStr(Lot,4),10,"Arial Bold",Red);
          ObjectSet("Original3",OBJPROP_CORNER,0);
          ObjectSet("Original3",OBJPROP_XDISTANCE,300);
          ObjectSet("Original3",OBJPROP_YDISTANCE,40);

          Ticket=OrderSend(Symbol(),1,Lot,Bid,MarketInfo(_Sy mbol,MODE_STOPLEVEL),StopLoss,TP,"NULL",Magic,0,cl rRed);
          if(Ticket>0)
          {
          Order=true;
          }
          if(Ticket<0)
          {
          if(Errors(GetLastError())==false)
          return(0);
          }
          }
          Terminal(); // Функция учёта ордеров `
          }
          return(Ticket);
          }
          Если не сосредотачиваться на всей этой пурге, то начни с внимательного прочтения и сравнения своего кода и текста справки:
          Итак Справка:
          Код:
          int  OrderSend( 
             string   symbol,              // символ 
             int      cmd,                    // торговая операция 
             double   volume,            // количество лотов 
             double   price,                // цена 
             int      slippage,              // проскальзывание 
             double   stoploss,            // stop loss 
             double   takeprofit,          // take profit 
             string   comment=NULL,        // комментарий 
             int      magic=0,             // идентификатор 
             datetime expiration=0,        // срок истечения ордера 
             color    arrow_color=clrNONE  // цвет 
             );
          И твой вариант:
          Код:
                      Ticket = OrderSend(
                                 Symbol(),
                                 0,
                                 Lot,
                                 Ask,
                                 MarketInfo(_Symbol,MODE_STOPLEVEL),  // ?
                                 StopLoss,
                                 TP,
                                 "NULL",
                                 Magic,
                                 0,
                                 clrRed
                               );
          Ну и посмотри, соответствует ли то, что ты опубликовал, тому, что ты хотел опубликовать. И на будущее учти глюки форума.
          Последний раз редактировалось MonyaMaker; 12.02.2020, 20:21.

          Комментарий

          • #6 Свернуть

            Сообщение от Лягушка Посмотреть сообщение
            В чем может быть проблема?
            С большего, что бросилось в глаза..
            MQL код:
                    if(Lot
            {

            Lot=Min_Lot;

            }

            1. Непонятная конструкция с лотом, а также со скобками круглыми и фигурными....
            MQL код:
             Lot=NormalizeDouble((Dep/((Ask-StopLoss)/N*M)),2);

            2. Вычисление лота под вопросом, так как в данной функции непонятно чему равны переменные "М" и "N", так как данные переменные просто объявлены в данной функции и только.
            3. Ask и Bid не нормализован при отправке на сервер.
            4. Непонятно для чего нужно вот это..
            Mas_Tip[Tip]==0
            MQL код:
             while(Order==false && Mas_Tip[Tip]==0) 

            5.
            MQL код:
            DoubleToStr(TakeProfit,4)

            TakeProfit принадлежит к переменной интегер, а выводишь на чарт с 4 нулями, для чего??
            Последний раз редактировалось Leschich; 12.02.2020, 20:29.
            " Мы можем видеть то, что случится в будущем, по событиям прошлого, если знаем, как смотреть". В. Сперандео.
            Мы называем процессы случайными... до тех пор, пока не установим их закономерности.

            Комментарий

            • #7 Свернуть

              дело в том что по этому коду ордера в одну сторону выставляет корректно, но если они не закрыты и появляется сигнал для противоположных ордеров выдает ошибку. я в код вписал строки чтоб выводило значение параметра на экран. например если стоят ордера покупать и бай лимит то при попытке выставить селл в журнале появляется ошибка 130 а на экран выводит вместо заданного значения тейкпрофит значение просто 1. TakeProfit который выводит на экран это значение внешней переменной. На форум вообще робота можно скинуть? Если я пропишу показ внешнего тп сможете ответить?
              Последний раз редактировалось Лягушка; 12.02.2020, 20:35.

              Комментарий

              • #8 Свернуть

                Сообщение от Лягушка Посмотреть сообщение
                стоят ордера покупать и бай лимит
                Не знаю, где у тебя байлимиты стоят, в функции открываются только рыночные ордера: OP_BUY - "0" OP_SELL - "1" ;

                Комментарий

                • #9 Свернуть

                  Сообщение от Лягушка Посмотреть сообщение
                  а вот тейк профит передает значение 1. Соответственно тейк выставить не может, так как слишком близко к цене
                  И где эта передача, опять говорим не о чем
                  И вообще, тупое копирование какого то кода ничего вам не даст в плане развития. Только руками переписали и моторика рук помогает голове запомнить что к чему..
                  Сообщение от Лягушка Посмотреть сообщение
                  дело в том что по этому коду ордера в одну сторону выставляет корректно,
                  Про корректность я бы пока не говорил..
                  Последний раз редактировалось Leschich; 12.02.2020, 20:43.
                  " Мы можем видеть то, что случится в будущем, по событиям прошлого, если знаем, как смотреть". В. Сперандео.
                  Мы называем процессы случайными... до тех пор, пока не установим их закономерности.

                  Комментарий

                  • #10 Свернуть

                    да суть не в лимитах. просто раньше все работало, обновилась винда обновился мт и при повторной компеляции внешнюю переменную TakeProfit один раз передает корректно, но если ордера еще открыты и надо открыть встречный вместо заданного значения приходит цифра 1. проверял значения стоп лосс он как внешняя переменная передается нормально

                    Комментарий

                    • #11 Свернуть

                      Сообщение от Лягушка Посмотреть сообщение
                      да суть не в лимитах. просто раньше все работало, обновилась винда обновился мт и при повторной компеляции внешнюю переменную TakeProfit один раз передает корректно, но если ордера еще открыты и надо открыть встречный вместо заданного значения приходит цифра 1. проверял значения стоп лосс он как внешняя переменная передается нормально
                      Может дело и не в лимитах, а может... опять гадать будем?
                      " Мы можем видеть то, что случится в будущем, по событиям прошлого, если знаем, как смотреть". В. Сперандео.
                      Мы называем процессы случайными... до тех пор, пока не установим их закономерности.

                      Комментарий

                      • #12 Свернуть

                        CCI.ex4
                        Depo размер депозита на риск
                        StopL расстояние от цены до стоп лоса
                        TakeProfit Расстояние от цены до тейкпрофита
                        MA поставить false
                        В коде вписал выводить на экран значение TakeProfit
                        Если есть ордера в одну сторону при попытке открыть встречные выдаст 130 ошибку в журнале и на экран выведет 1. попробуйте в тестере
                        Последний раз редактировалось Лягушка; 12.02.2020, 21:05.

                        Комментарий

                        • #13 Свернуть

                          Сообщение от Лягушка Посмотреть сообщение
                          попробуйте в тестере
                          Так вы определитесь сначала... вам код рабочий нужен или тестирование?? С тестером, вы как нибудь уже сами..
                          " Мы можем видеть то, что случится в будущем, по событиям прошлого, если знаем, как смотреть". В. Сперандео.
                          Мы называем процессы случайными... до тех пор, пока не установим их закономерности.

                          Комментарий

                          • #14 Свернуть

                            Сообщение от Leschich Посмотреть сообщение
                            Так вы определитесь сначала... вам код рабочий нужен или тестирование?? С тестером, вы как нибудь уже сами..
                            Все? Ветку можно закрывать?

                            Комментарий

                            • <a href="https://www.instaforex.org/ru/?x=ruforum">InstaForex</a>
                            • #15 Свернуть

                              Сообщение от MonyaMaker Посмотреть сообщение
                              Все? Ветку можно закрывать?
                              Да не... похоже занялся практическим исправлением кода.
                              " Мы можем видеть то, что случится в будущем, по событиям прошлого, если знаем, как смотреть". В. Сперандео.
                              Мы называем процессы случайными... до тех пор, пока не установим их закономерности.

                              Комментарий

                              working...
                              X