Заработай до
50000$
на приглашении друзей
получить StartUp Bonus
от ИнстаФорекс
Вложений не требуется!
Начни торговлю
без вложений и риска
С новым STARTUP бонусом 1000$
Получи бонус
55%
от ИнстаФорекс
на каждое пополнение
Ответить в теме
Страница 1 из 29
1 2 11 ... Последняя ◄╝

Показаны сообщения: с 1 по 20 из 563

Тема: Учимся программировать на MQL4 вместе с Mr.Артуром

 Перейти в классический вид темы
  1. линк#1
    Кандидат форумных наук
    Отдыхаю
     
    Artur приемлемый уровень репутации Artur приемлемый уровень репутации Аватар для Artur
    Регистрация:
    06.09.2010
    Пол:
    Мужчина
    Сообщений:
    2,038
    Накопленные выплаты (Подробнее):
    26207 RUB
    Поставил(а) лайков:
    49
    Получено лайков:   210
    в 174 сообщениях
    10%
    ПодписатьсяПодписаться
    Подписано: 0
    Приветствую всех новичков так же как я желающих самостоятельно научиться писать программы на MQL4. В этой теме я буду конспектировать нелегкий путь своего обучения с примерами и конкретными задачами которые предлагаю решать сообща . Думаю всем вместе нам будет легче разобраться и освоиться в этом языке программирования.

    Код:
    //+------------------------------------------------------------------+
    //|                                                          111.mq4 |
    //|                      Copyright © 2011, MetaQuotes Software Corp. |
    //|                                        http://www.metaquotes.net |
    //+------------------------------------------------------------------+
    #property copyright "Copyright © 2011, MetaQuotes Software Corp."
    #property link      "http://www.metaquotes.net"
    
    //+++-здесь вписываются переменные-+++
    //+------------------------------------------------------------------+
    //| expert initialization function                                   |
    //+------------------------------------------------------------------+
    int init()
      {
    //----
       
    //----
       return(0);
      }
    //+------------------------------------------------------------------+
    //| expert deinitialization function                                 |
    //+------------------------------------------------------------------+
    int deinit()
      {
    //----
       
    //----
       return(0);
      }
    //+------------------------------------------------------------------+
    //| expert start function                                            |
    //+------------------------------------------------------------------+
    int start() //+++- старт самой программы и написание его основного кода тут-+++
      {
    //----
       
    //----
       return(0);
      }
    //+------------------------------------------------------------------+
    это код простого советника
    дальше я буду выкладывать прочее необходимое
    если будут вопросы пишите постараюсь ответить

    Последний раз редактировалось DGreen; 24.07.2011 в 22:51.

    Предлагаю к инвестированию ^ /-/ Перечитайте регламент найдёте много интерестного!

  2. post_thanks Получено лайков: 1

    Krashid (13.03.2012)

    <a href="https://forexdengi.com/attachment/1/0/1.php">Форекс портал</a>
     
  3. ТОП сообщений
    2012-08-15   15:38
    Лучший ответ #1
    Накопленные выплаты 18175 RUB

    Цитата Сообщение от mechanic40 Посмотреть сообщение
    Это понятно - но вопрос как связан индекс ордера со временем его открытия?
    Представьте себе массив, в который записываются различные события, все идет по порядку, можно проверить:
    [PHP]void start()
    {
    for(int i = OrdersTotal() -1; i >= 0;i--)
    {
    if(OrderSelect(i,SELECT_BY_POS))
    Alert("index = ",i," open_time = ",TimeToStr(OrderOpenTime(), TIME_DATE|TIME_MINUTES|TIME_SECONDS));
    }
    }[/PHP]
    Но ситуации бывают разными, вот например: - "Есть ДЦ, где OrderOpenTime() показывает время выставления отложенного ордера, а не время его срабатывания. Поэтому затруднительно узнать, когда же открылась позиция".

    2019-05-07   23:11
    Лучший ответ #2
    Накопленные выплаты 164763 RUB

    Цитата Сообщение от kola16 Посмотреть сообщение
    советник привязан к брокеру , не могу отвязать советника.
    Вместо
    Код:
    if(StringSubstr(broker,0,2) == "XM")
    пропиши
    Код:
    if(true)

    2011-08-03   17:59
    Лучший ответ #3
    Накопленные выплаты 322 RUB

    Цитата Сообщение от TioSin Посмотреть сообщение
    чтоб наверняка быть уверенным что бот выбрал именно последний закрытый ордер
    Для поиска последнего закрытого ордера можно использовать время закрытия ордеров, пробегаем по всем ордерами находим максимальное время...
    int Magic = 0;
    int closetime= 0,lastorder=0;
    for(int i=0;i<OrdersHistoryTotal();i++)
    {
    if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continue;
    if(OrderMagicNumber()!=Magic) continue;
    if(closetime<OrderCloseTime())
    {
    closetime = OrderCloseTime();
    lastorder = OrderTicket();
    }
    }
    OrderSelect(lastorder,SELECT_BY_TICKET,MODE_HISTOR Y);
    Alert("order_" + OrderTicket() + " close_time= "+ TimeYear(OrderCloseTime())+"."+TimeMonth(OrderClos eTime())+"."+TimeDay(OrderCloseTime())+ " " + TimeHour(OrderCloseTime())+":"+TimeMinute(OrderClo seTime())+":"+TimeSeconds(OrderCloseTime()) );

    2012-02-27   20:51
    Лучший ответ #4
    Накопленные выплаты 4855 RUB

    Цитата Сообщение от Artur Посмотреть сообщение
    а как закрепить по другому что когда отошла от цены открытия ордера до -31 пункта то тогда модифицировать...???
    Что модифицируешь от того и отталкивайся, если тп, то делай условие чтобы тп ордера модифился при подходе цены к текущему теикпрофиту на несколько пунктов.При открытии ордера ставишь тп на (31 пункт + расстояние модификации(5пип допустим) итого 36) от открытия ордера и далее запускаешь условие вида (для селл) if (bid<=OrderTakeProfit()+ 5*point) {Модифицирвать тп ордера на OrderTakeProfit() минус расстояние на которое нужно перенести тп +5пип}

    2018-05-26   02:56
    Лучший ответ #5
    Накопленные выплаты 8369 RUB

    Привет всем. Кто подскажет может, надо 2 советника объединить. На разных окнах не удобно. темболее что их надо одновременно запускать.сигналы не сразу со всех валют идут. евро допустим я включу. а вот далее беда. через функцию можно как то сделать.Как?

    2018-07-23   14:07
    Лучший ответ #6
    Накопленные выплаты 472 RUB

    Цитата Сообщение от MoneyDay Посмотреть сообщение
    Привет всем. Кто подскажет может, надо 2 советника объединить. На разных окнах не удобно. темболее что их надо одновременно запускать.сигналы не сразу со всех валют идут. евро допустим я включу. а вот далее беда. через функцию можно как то сделать.Как?
    Доброго дня MoneyDay .Подобные ситуации можно решить через Magicnumber самих советников.То есть.Поясню.Открываем один график и на него присоеденяем первый советник с первым magic number/.На второй график так же можно прикрепить другой советник с другим magic .На третий график прикрепляем третий советник и третий magic если надо и так далее.Если нужно пишите подскажу более детально,но советник должен быть с открытым кодом.Удачного тренда

  4. линк#2
    Кандидат форумных наук
    Отдыхаю
     
    Artur приемлемый уровень репутации Artur приемлемый уровень репутации Аватар для Artur
    Регистрация:
    06.09.2010
    Пол:
    Мужчина
    Сообщений:
    2,038
    Накопленные выплаты (Подробнее):
    26207 RUB
    Поставил(а) лайков:
    49
    Получено лайков:   210
    в 174 сообщениях
    10%
    ПодписатьсяПодписаться
    Подписано: 0
    где написанно
    Код:
    //+++-здесь вписываются переменные -++
    это место для вписания переменных типа
    Код:
    extern int a = 0;
             double b=0;
             bool c = true;
             string = 0;
    для тех кто не знает - "//" - этот символ означает коментарий который длится до окончания строки


    Предлагаю к инвестированию ^ /-/ Перечитайте регламент найдёте много интерестного!

  5. линк#3
    Кандидат форумных наук
    Отдыхаю
     
    Artur приемлемый уровень репутации Artur приемлемый уровень репутации Аватар для Artur
    Регистрация:
    06.09.2010
    Пол:
    Мужчина
    Сообщений:
    2,038
    Накопленные выплаты (Подробнее):
    26207 RUB
    Поставил(а) лайков:
    49
    Получено лайков:   210
    в 174 сообщениях
    10%
    ПодписатьсяПодписаться
    Подписано: 0
    int является целочисленным выражением без запятой. например 1,2,3,4,5,6, и т.д
    double это числа с плавающей запятой например 0,01 или 0,1
    bool это логическое значение... тут вариантов всего два true или false
    и string простейшие числа до 256 без запятой для малого хранения в памяти.

    позже я опишу переменные которые пока что не указал


    Предлагаю к инвестированию ^ /-/ Перечитайте регламент найдёте много интерестного!

  6. линк#4
    Кандидат форумных наук
    mell авторитетный пользователь mell авторитетный пользователь mell авторитетный пользователь mell авторитетный пользователь mell авторитетный пользователь mell авторитетный пользователь mell авторитетный пользователь mell авторитетный пользователь mell авторитетный пользователь mell авторитетный пользователь mell авторитетный пользователь Аватар для mell
    Регистрация:
    15.06.2011
    Пол:
    Мужчина
    Сообщений:
    2,079
    Накопленные выплаты (Подробнее):
    9596 RUB
    Поставил(а) лайков:
    1,141
    Получено лайков:   4,035
    в 1,229 сообщениях
    194%
    ПодписатьсяПодписаться
    Подписано: 0
    приветствую, тогда первый вопрос. не могу придумать как выставлять стоплосс на двух трех позициях сразу. пока выставляется только на одном. а мне надо на всех одинаковый стоплосс .
    Код:
    for (int i = 0; i < OrdersTotal(); i++)
      if (OrderSelect(i, SELECT_BY_POS))
       if (OrderSymbol() == Symbol() && (OrderMagicNumber() ==MAGIC2 && OrderType() < 2)||(OrderMagicNumber() ==MAGIC1 && OrderType() < 2)
    ||(OrderMagicNumber() ==MAGIC3 && OrderType() < 2)|| (OrderMagicNumber() ==MAGIC22 && OrderType() < 2)
    ||(OrderMagicNumber() ==MAGIC23 && OrderType() < 2))
       {
        RefreshRates();
        double OpPrice=OrderOpenPrice();
       if(OrderType() == OP_BUY)            
        if((OpPrice+TrailingStop1*Tick) < ld_16)
       OrderModify(OrderTicket(), 0, (OpPrice+TrailingStop1*Tick), OrderTakeProfit(), 0, Blue);

    Индикаторы зло! Не верю никому кроме Bollinger Bands. хотя.. и ему не верю!
    Тестирую новинку, сольет не сольет...:
    [img]http://widgets.********.com/widgets/1072581/mini.jpg[/img]

  7. линк#5
    Кандидат форумных наук
    Отдыхаю
     
    Artur приемлемый уровень репутации Artur приемлемый уровень репутации Аватар для Artur
    Регистрация:
    06.09.2010
    Пол:
    Мужчина
    Сообщений:
    2,038
    Накопленные выплаты (Подробнее):
    26207 RUB
    Поставил(а) лайков:
    49
    Получено лайков:   210
    в 174 сообщениях
    10%
    ПодписатьсяПодписаться
    Подписано: 0
    Давайте разберём ваш скрипт на состовляющие
    Код:
     for (int i = 0; i < OrdersTotal(); i++)
    for это цикл (повторение указанное количество раз) у вас же цикл повторяется i < OrderTotal
    Код:
      if (OrderSelect(i, SELECT_BY_POS))
    if orderSelect(номер ордера, порядковый номер позиции в списке)
    Код:
      if (OrderSymbol() == Symbol() && (OrderMagicNumber() ==MAGIC2 && OrderType() < 2)(OrderMagicNumber() ==MAGIC1 && OrderType() < 2)(OrderMagicNumber() ==MAGIC3 && OrderType() < 2) (OrderMagicNumber() ==MAGIC22 && OrderType() < 2)(OrderMagicNumber() ==MAGIC23 && OrderType() < 2))
    если Символ ордера любой и магический номер = 2 и типордера < 2 (может лечше <=)
    магический номер = 1 и тип ордера < 2
    магический номер = 3 и тип ордера < 2
    и дальше повторяются почти так же с magic22 и 23

    Код:
     {    RefreshRates();
        double OpPrice=OrderOpenPrice();
       if(OrderType() == OP_BUY)            
        if((OpPrice+TrailingStop1*Tick) < ld_16)
       OrderModify(OrderTicket(), 0, (OpPrice+TrailingStop1*Tick), OrderTakeProfit(), 0, Blue);
    дальше обновление и условие

    Код:
    if((OpPrice+TrailingStop1*Tick) < ld_16)
    откуда что и куда... параметр ЛД_16 ...

    это не для новечков уж точно!

    и ещё кое что If это условие и переводится как если а ordertotal это количество ордеров


    Предлагаю к инвестированию ^ /-/ Перечитайте регламент найдёте много интерестного!

  8. post_thanks Получено лайков: 1

    mell (23.07.2011)

  9. линк#6
    Кандидат форумных наук
    mell авторитетный пользователь mell авторитетный пользователь mell авторитетный пользователь mell авторитетный пользователь mell авторитетный пользователь mell авторитетный пользователь mell авторитетный пользователь mell авторитетный пользователь mell авторитетный пользователь mell авторитетный пользователь mell авторитетный пользователь Аватар для mell
    Регистрация:
    15.06.2011
    Пол:
    Мужчина
    Сообщений:
    2,079
    Накопленные выплаты (Подробнее):
    9596 RUB
    Поставил(а) лайков:
    1,141
    Получено лайков:   4,035
    в 1,229 сообщениях
    194%
    ПодписатьсяПодписаться
    Подписано: 0
    лд_16 это нормализованный Bid

    вот что я наляпал основываясь на изучении похожих тралов из различных скриптов. теперь он ставит стоплоссы на все ордера но не совсем понятно что такое знак "!" перед ордерселект. кусок кода для баевских ордеров, для селла аналогично но там другие магики, так как у меня два тралла по одной логике баев селлов и по другой логике.
    Код:
    void TrailingStopDoubleLevel()
    {
    double OpPrice=OrderOpenPrice();
    if((OpPrice+TrailingStop1*Tick) < ld_16)
     
        
      {   for(int i=OrdersTotal()-1;i>=0;i--)
      
       {
         if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
             continue;
          if(OrderSymbol()==Symbol()&& ((OrderMagicNumber() == MAGIC1 && OrderType() < 2)||
             (OrderMagicNumber() == MAGIC2 && OrderType() < 2)||
            (OrderMagicNumber() == MAGIC3 && OrderType() < 2) ))
             continue;
    // Блок 1. Нормализация основных характеристик позиции -----------------------------------
       // RefreshRates(); //это я экспериментировал с освежение данных
       
       if(OrderType() == OP_BUY)            
          OrderModify(OrderTicket(), 0, (OpPrice+TrailingStop1*Tick), OrderTakeProfit(), 0);
          }
        }
       
      else
      {
      if((OpPrice-TrailingStop1*Tick) > ld_8)
      
       { 
       for(int i1=OrdersTotal()-1;i1>=0;i1--)
        {
         if(!OrderSelect(i1,SELECT_BY_POS,MODE_TRADES))
             continue;
          if(OrderSymbol()==Symbol()&&( (OrderMagicNumber() == MAGIC15 && OrderType() < 2)||
           (OrderMagicNumber() == MAGIC25 && OrderType() < 2)||
           (OrderMagicNumber() == MAGIC35 && OrderType() < 2) ))
             continue;
    получается правильнее будет написать
    Код:
    вместо   if(OrderSymbol()==Symbol()
    так   if(OrderSymbol()==NULL
    правильно? чтоб работал только по текущему инструменту.?
    а почему лучше: OrderType() <=2 ? я ведь работаю только с открытыми ордерами.

    Индикаторы зло! Не верю никому кроме Bollinger Bands. хотя.. и ему не верю!
    Тестирую новинку, сольет не сольет...:
    [img]http://widgets.********.com/widgets/1072581/mini.jpg[/img]

  10. линк#7
    Знающий
    Сама доброта
     
    DGreen авторитетный пользователь DGreen авторитетный пользователь DGreen авторитетный пользователь DGreen авторитетный пользователь DGreen авторитетный пользователь DGreen авторитетный пользователь DGreen авторитетный пользователь DGreen авторитетный пользователь DGreen авторитетный пользователь DGreen авторитетный пользователь DGreen авторитетный пользователь Аватар для DGreen
    Регистрация:
    01.11.2010
    Пол:
    Мужчина
    Сообщений:
    4,018
    Накопленные выплаты (Подробнее):
    4855 RUB
    Поставил(а) лайков:
    3,491
    Получено лайков:   3,779
    в 1,500 сообщениях
    94%
    ПодписатьсяПодписаться
    Подписано: 0
    Цитата Сообщение от mell Посмотреть сообщение
    не совсем понятно что такое знак "!" перед ордерселект
    Это логическое "Не" ,это условие не позволяет продолжить работу если выбор ордера не удался.(а соответственно этого ордера не существует)
    http://docs.mql4.com/ru/basis/operations/bool


  11. линк#8
    Кандидат форумных наук
    Отдыхаю
     
    Artur приемлемый уровень репутации Artur приемлемый уровень репутации Аватар для Artur
    Регистрация:
    06.09.2010
    Пол:
    Мужчина
    Сообщений:
    2,038
    Накопленные выплаты (Подробнее):
    26207 RUB
    Поставил(а) лайков:
    49
    Получено лайков:   210
    в 174 сообщениях
    10%
    ПодписатьсяПодписаться
    Подписано: 0
    Цитата Сообщение от mell Посмотреть сообщение
    получается правильнее будет написать
    Код:
    вместо   if(OrderSymbol()==Symbol()
    так   if(OrderSymbol()==NULL
    правильно?
    да.

    что косается ордер тип = http://docs.mql4.com/ru/trading/OrderType


    Предлагаю к инвестированию ^ /-/ Перечитайте регламент найдёте много интерестного!

  12. линк#9
    Кандидат форумных наук
    Отдыхаю
     
    Artur приемлемый уровень репутации Artur приемлемый уровень репутации Аватар для Artur
    Регистрация:
    06.09.2010
    Пол:
    Мужчина
    Сообщений:
    2,038
    Накопленные выплаты (Подробнее):
    26207 RUB
    Поставил(а) лайков:
    49
    Получено лайков:   210
    в 174 сообщениях
    10%
    ПодписатьсяПодписаться
    Подписано: 0
    продолжим нормализованный курс
    в поле
    Код:
    int start() //+++- старт самой программы и написание его основного кода тут-+++
    будем писать саму программу. для примера начну с простейшего пересечения двух средне скользящих
    после int start() ставится фигурная скобочка и всё что внутри неё и программа читает как рабочий код программы
    {
    double a = iMA(в этом поле вставляются параметры первой средней скользящей);
    и так же описывается вторая МА только мы присваиваем ей другое значение (не а) а например b
    после чего начинаем писать условие открытия ордеров
    if (a>b){
    OrderSend // открытие ордера ............

    }
    } // незабывайте закрыть иначе будет считывать дальше


    Предлагаю к инвестированию ^ /-/ Перечитайте регламент найдёте много интерестного!

  13. линк#10
    Кандидат форумных наук
    mell авторитетный пользователь mell авторитетный пользователь mell авторитетный пользователь mell авторитетный пользователь mell авторитетный пользователь mell авторитетный пользователь mell авторитетный пользователь mell авторитетный пользователь mell авторитетный пользователь mell авторитетный пользователь mell авторитетный пользователь Аватар для mell
    Регистрация:
    15.06.2011
    Пол:
    Мужчина
    Сообщений:
    2,079
    Накопленные выплаты (Подробнее):
    9596 RUB
    Поставил(а) лайков:
    1,141
    Получено лайков:   4,035
    в 1,229 сообщениях
    194%
    ПодписатьсяПодписаться
    Подписано: 0
    Цитата Сообщение от Artur Посмотреть сообщение
    да.

    что косается ордер тип = http://docs.mql4.com/ru/trading/OrderType
    но там нет цифрового обозначения ордеров, к сожалению. я думал что это выглядит так:
    OP_BUY - 0
    OP_SELL - 1
    OP_BUYLIMIT - 2
    OP_BUYSTOP - 3
    OP_SELLLIMIT - 4
    OP_SELLSTOP - 5
    поэтому у меня стоит цифра < 2, видимо я что то не так понимаю?

    Индикаторы зло! Не верю никому кроме Bollinger Bands. хотя.. и ему не верю!
    Тестирую новинку, сольет не сольет...:
    [img]http://widgets.********.com/widgets/1072581/mini.jpg[/img]

  14. линк#11
    Кандидат форумных наук
    Отдыхаю
     
    Artur приемлемый уровень репутации Artur приемлемый уровень репутации Аватар для Artur
    Регистрация:
    06.09.2010
    Пол:
    Мужчина
    Сообщений:
    2,038
    Накопленные выплаты (Подробнее):
    26207 RUB
    Поставил(а) лайков:
    49
    Получено лайков:   210
    в 174 сообщениях
    10%
    ПодписатьсяПодписаться
    Подписано: 0
    вроде так должно быть
    OP_BUY - 1
    OP_SELL - 2
    OP_BUYLIMIT - 3
    OP_BUYSTOP - 4
    OP_SELLLIMIT - 5
    OP_SELLSTOP - 6

    хотя возможно я ошибаюсь
    может лучше без численных значений что бы программа луче понимала написать OP_BUY&&OP_SELL


    Предлагаю к инвестированию ^ /-/ Перечитайте регламент найдёте много интерестного!

  15. линк#12
    Кандидат форумных наук
    mell авторитетный пользователь mell авторитетный пользователь mell авторитетный пользователь mell авторитетный пользователь mell авторитетный пользователь mell авторитетный пользователь mell авторитетный пользователь mell авторитетный пользователь mell авторитетный пользователь mell авторитетный пользователь mell авторитетный пользователь Аватар для mell
    Регистрация:
    15.06.2011
    Пол:
    Мужчина
    Сообщений:
    2,079
    Накопленные выплаты (Подробнее):
    9596 RUB
    Поставил(а) лайков:
    1,141
    Получено лайков:   4,035
    в 1,229 сообщениях
    194%
    ПодписатьсяПодписаться
    Подписано: 0
    Цитата Сообщение от Artur Посмотреть сообщение
    вроде так должно быть
    OP_BUY - 1
    OP_SELL - 2
    OP_BUYLIMIT - 3
    OP_BUYSTOP - 4
    OP_SELLLIMIT - 5
    OP_SELLSTOP - 6

    хотя возможно я ошибаюсь
    может лучше без численных значений что бы программа луче понимала написать OP_BUY&&OP_SELL
    я сам точно не знаю. но в моем случае при <2 срабатывает на селловских и на баевских ордерах. и я в молодости увлекался С#, с тех пор привык что отсчет в программинге обычно начинается с нуля. может я и не прав.. думаю вы правы, лучше без числовых значений, программе все равно а человеку легче читать. хотя код тогда увеличится: OrderType() == OP_BUY|| OrderType() ==OP_SELL

    проверил, if(OrderSymbol()==NULL выдает ошибку.

    Индикаторы зло! Не верю никому кроме Bollinger Bands. хотя.. и ему не верю!
    Тестирую новинку, сольет не сольет...:
    [img]http://widgets.********.com/widgets/1072581/mini.jpg[/img]

  16. post_thanks Получено лайков: 1

    Незарегистрированный (1 пользователь)

  17. линк#13
    Кандидат форумных наук
    no
     
    fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация Аватар для fore-x
    Регистрация:
    18.03.2011
    Пол:
    Мужчина
    Сообщений:
    1,716
    Накопленные выплаты (Подробнее):
    18175 RUB
    Поставил(а) лайков:
    440
    Получено лайков:   588
    в 401 сообщениях
    34%
    ПодписатьсяПодписаться
    Подписано: 0
    Всем привет, вопрос: функция - OrderCloseBy( ) -"Закрытие одной открытой позиции другой позицией, открытой по тому же самому инструменту, но в противоположном направлении", эта функция закрывает встречные ордера (уже открытые) или закрывает одну открытую позицию и потом открывает ордер в противоположном направлении (делает переворот)?


  18. линк#14
    Знающий
    Сама доброта
     
    DGreen авторитетный пользователь DGreen авторитетный пользователь DGreen авторитетный пользователь DGreen авторитетный пользователь DGreen авторитетный пользователь DGreen авторитетный пользователь DGreen авторитетный пользователь DGreen авторитетный пользователь DGreen авторитетный пользователь DGreen авторитетный пользователь DGreen авторитетный пользователь Аватар для DGreen
    Регистрация:
    01.11.2010
    Пол:
    Мужчина
    Сообщений:
    4,018
    Накопленные выплаты (Подробнее):
    4855 RUB
    Поставил(а) лайков:
    3,491
    Получено лайков:   3,779
    в 1,500 сообщениях
    94%
    ПодписатьсяПодписаться
    Подписано: 0
    Цитата Сообщение от mell Посмотреть сообщение
    я сам точно не знаю. но в моем случае при <2 срабатывает на селловских и на баевских ордерах
    Можно использовать цифры, buy-0, sell-1, и далее,не забывай пользоваться "!" перед ордер селект или проверять существование выбранного ордера допустим по тикету , т к если выбор ордера не удался, но ничего не определяет это, ордера будут распознаваться как бай потому что OrderType() будет равен 0. Правильно писать if(OrderSymbol()==Symbol() ) {} а не NULL


  19. линк#15
    Кандидат форумных наук
    no
     
    fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация Аватар для fore-x
    Регистрация:
    18.03.2011
    Пол:
    Мужчина
    Сообщений:
    1,716
    Накопленные выплаты (Подробнее):
    18175 RUB
    Поставил(а) лайков:
    440
    Получено лайков:   588
    в 401 сообщениях
    34%
    ПодписатьсяПодписаться
    Подписано: 0
    extern double Lots = 0.01;

    int start()
    {
    double priceline = ObjectGet( "haClose" , OBJPROP_PRICE1);

    /* А вот тут нужно задать условие, которое не позволит открыться ордеру,
    так как при запуске советника цена может быть очень далеко от priceline.
    Что-то типа if(Ask > priceline && Bid < priceline) то начинаем торговать,
    а после его исполнения этот блок нужно полностью отключить, как это лучше сделать?
    */

    if (priceline != 0 && Bid > priceline && OrdersTotal()== 0)
    OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0);
    if (priceline != 0 && Ask < priceline && OrdersTotal()== 0)
    OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0);

    for(int i=0;i {
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false ) break;

    if(OrderType()==OP_BUY)
    {
    if (Ask < priceline) OrderClose(OrderTicket(),OrderLots(),Bid,3); break;
    }
    if(OrderType()==OP_SELL)
    {
    if (Bid > priceline) OrderClose(OrderTicket(),OrderLots(),Ask,3); break;
    }
    }

    return(0);
    }


  20. линк#16
    Кандидат форумных наук
    no
     
    fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация Аватар для fore-x
    Регистрация:
    18.03.2011
    Пол:
    Мужчина
    Сообщений:
    1,716
    Накопленные выплаты (Подробнее):
    18175 RUB
    Поставил(а) лайков:
    440
    Получено лайков:   588
    в 401 сообщениях
    34%
    ПодписатьсяПодписаться
    Подписано: 0
    Как можно сделать сообщение более наглядным, за пару кликов, например вот такого вида:

    if
    (priceline != 0 && Bid > priceline && OrdersTotal()== 0)
    OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0);
    if (priceline != 0 && Ask < priceline && OrdersTotal()== 0)
    OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0);


    Сохранил код в *.html и вставил, делов то, но вот беда, получается следующее:

    if (priceline != 0 && Bid > priceline && OrdersTotal()== 0) OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0); if (priceline != 0 && Ask < priceline && OrdersTotal()== 0) OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0);


  21. линк#17
    Специалист
    ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация Аватар для ir0407
    Регистрация:
    02.12.2010
    Сообщений:
    7,183
    Накопленные выплаты (Подробнее):
    164763 RUB
    Поставил(а) лайков:
    922
    Получено лайков:   7,267
    в 3,494 сообщениях
    101%
    ПодписатьсяПодписаться
    Подписано: 0
    Цитата Сообщение от fore-x Посмотреть сообщение

    Используй кнопочку на которой нарисован значок "#" либо кнопочку с надписью "PHP".


  22. линк#18
    Кандидат форумных наук
    no
     
    fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация Аватар для fore-x
    Регистрация:
    18.03.2011
    Пол:
    Мужчина
    Сообщений:
    1,716
    Накопленные выплаты (Подробнее):
    18175 RUB
    Поставил(а) лайков:
    440
    Получено лайков:   588
    в 401 сообщениях
    34%
    ПодписатьсяПодписаться
    Подписано: 0
    PHP код:
    extern double Lots = 0.01; int start() { double priceline = ObjectGet( "haClose" , OBJPROP_PRICE1); /* А вот тут нужно задать условие, которое не позволит открыться ордеру, так как при запуске советника цена может быть очень далеко от priceline. Что-то типа if(Ask > priceline && Bid < priceline) то начинаем торговать, а после его исполнения этот блок нужно полностью отключить, как это сделать? */ if (priceline != 0 && Bid > priceline && OrdersTotal()== 0) OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0); if (priceline != 0 && Ask < priceline && OrdersTotal()== 0) OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0); for(int i=0;i<OrdersTotal();i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; if(OrderType()==OP_BUY) { if (Ask < priceline) OrderClose(OrderTicket(),OrderLots(),Bid,3); break; } if(OrderType()==OP_SELL) { if (Bid > priceline) OrderClose(OrderTicket(),OrderLots(),Ask,3); break; } } return(0); }
    А как окошко растянуть?


  23. линк#19
    Специалист
    ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация Аватар для ir0407
    Регистрация:
    02.12.2010
    Сообщений:
    7,183
    Накопленные выплаты (Подробнее):
    164763 RUB
    Поставил(а) лайков:
    922
    Получено лайков:   7,267
    в 3,494 сообщениях
    101%
    ПодписатьсяПодписаться
    Подписано: 0
    Цитата Сообщение от mell Посмотреть сообщение
    приветствую, тогда первый вопрос. не могу придумать как выставлять стоплосс на двух трех позициях сразу. пока выставляется только на одном. а мне надо на всех одинаковый стоплосс .
    Код:
    for (int i = 0; i < OrdersTotal(); i++)
      if (OrderSelect(i, SELECT_BY_POS))
       if (OrderSymbol() == Symbol() && (OrderMagicNumber() ==MAGIC2 && OrderType() < 2)||(OrderMagicNumber() ==MAGIC1 && OrderType() < 2)
    ||(OrderMagicNumber() ==MAGIC3 && OrderType() < 2)|| (OrderMagicNumber() ==MAGIC22 && OrderType() < 2)
    ||(OrderMagicNumber() ==MAGIC23 && OrderType() < 2))
       {
        RefreshRates();
        double OpPrice=OrderOpenPrice();
       if(OrderType() == OP_BUY)            
        if((OpPrice+TrailingStop1*Tick) < ld_16)
       OrderModify(OrderTicket(), 0, (OpPrice+TrailingStop1*Tick), OrderTakeProfit(), 0, Blue);
    Твой код должен выглядеть примерно так:
    PHP код:
    for(int i = 0; i < OrdersTotal(); i++)
    if(
    OrderSelect(i, SELECT_BY_POS))
    if(
    OrderSymbol() == Symbol()
    if((
    OrderMagicNumber() == MAGIC1) ||
    (
    OrderMagicNumber() == MAGIC2) ||
    (
    OrderMagicNumber() == MAGIC3) ||
    (
    OrderMagicNumber() == MAGIC22)||
    (
    OrderMagicNumber() == MAGIC23))
    {
    double OpPrice = OrderOpenPrice();
    if(
    OrderType() == OP_BYU)
    {
    double SlPrice = NormalizeDouble(OrderOpenPrice() + TrailingStop1 * Tick, Digits);
    if(
    SlPrice < NormalizeDouble(Bid, Digits))
    OrderModify(OrderTicket(),NormalizeDouble(OrderOpenPrice(), Digits), SlPrice, NormalizeDouble(OrderTakeProfit(), Digits), 0, Blue);
    }
    if(
    OrderType() == OP_SELL)
    {
    SlPrice = NormalizeDouble(OrderOpenPrice() - TrailingStop1 * Tick, Digits);
    if(
    SlPrice > NormalizeDouble(Ask, Digits))
    OrderModify(OrderTicket(), NormalizeDouble(OrderOpenPrice(), Digits), SlPrice, NormalizeDouble(OrderTakeProfit(), Digits), 0, Red);

    }
    RefreshRates();
    }
    Но тут тоже еще могут быть нюансы т.к. ошибочные ситуации здесь никак не обрабатываются.


  24. post_thanks Получено лайков: 1

    mell (24.07.2011)

    Crypto
  25. линк#20
    Специалист
    ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация Аватар для ir0407
    Регистрация:
    02.12.2010
    Сообщений:
    7,183
    Накопленные выплаты (Подробнее):
    164763 RUB
    Поставил(а) лайков:
    922
    Получено лайков:   7,267
    в 3,494 сообщениях
    101%
    ПодписатьсяПодписаться
    Подписано: 0
    fore-x, а вот так у меня с твоим кодом получилось:
    PHP код:
    extern double Lots = 0.01;
    int start()
    {
    double priceline = ObjectGet( "haClose" , OBJPROP_PRICE1);

    /* А вот тут нужно задать условие, которое не позволит открыться ордеру,
    так как при запуске советника цена может быть очень далеко от priceline.
    Что-то типа if(Ask > priceline && Bid < priceline) то начинаем торговать,
    а после его исполнения этот блок нужно полностью отключить, как это сделать? */

    if (priceline != 0 && Bid > priceline && OrdersTotal()== 0)
    OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0);
    if (
    priceline != 0 && Ask < priceline && OrdersTotal()== 0)
    OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0);
    for(
    int i=0;i<OrdersTotal();i++)
    {
    if(
    OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)
    break;
    if(
    OrderType()==OP_BUY)
    {
    if (
    Ask < priceline) OrderClose(OrderTicket(),OrderLots(),Bid,3);
    break;
    }
    if(
    OrderType()==OP_SELL)
    {
    if (
    Bid > priceline) OrderClose(OrderTicket(),OrderLots(),Ask,3);
    break;
    }
    }
    return(
    0);
    }
    Цитата Сообщение от fore-x Посмотреть сообщение
    А как окошко растянуть?
    Никак. Этим джаваскрипты форума заведуют. И как они порешат таким размером и окошко будет.


  26. post_thanks Получено лайков: 1

    fore-x (23.07.2011)


Страница 1 из 29
1 2 11 ... Последняя ◄╝

Подписанные на тему (18)

Похожие темы

  1. Торговать по Фибоуровням прибыльно.GBP\USD (Или учимся торговать по фибо сетке)
    от Viovol в разделе Каналы, ZigZag, волновой и графический анализ
    Replies: 68
    Последнее сообщение: 25.07.2017, 18:39
  2. MQL5: Учимся пошагово писать советника и разбираться со скриптами
    от Родионов Алексей в разделе MQL-программирование, АТС
    Replies: 299
    Последнее сообщение: 17.08.2016, 09:17
  3. MQL для тех, кто не умеет программировать
    от VDev в разделе MQL-программирование, АТС
    Replies: 45
    Последнее сообщение: 05.01.2014, 17:09