Форум трейдеров » Торговые роботы, советники, индикаторы » Язык MQL4 для "чайников"
+ Подписаться
Страница 11 из 16 ПерваяПервая ... 910111213 ... ПоследняяПоследняя
  1. 1,666
    Комментарии
    13
    Темы
    1681
    Репутация Pro
    Аватар для Chrome DNA  
    Мастер форумных наук

    5 Медалей
    Слушь, никак не врубился, а что это такое делается в при каждом тике? Там что, в цикле все доступные инструменты что-ли выставляются?! Вот здесь:

    for (SymbolCounter=1;SymbolCounter<=NumOfVal;SymbolCou nter++)
    {
    string valP=GetSymbolString(SymbolCounter);
    if (!isMgNum(valP,ID)) orderSend(valP,1,0.1,SL,TP,ID,1);
    }


    ...
    Буду разбирать. Похоже текст от какого-то англоязычного хозяина, ни хрена понять пока не могу... Много буков.
  2. 96
    Комментарии
    1
    Темы
    96
    Репутация Pro
     
    В начале пути

    2 Медалей
    Цитата Сообщение от Chrome DNA Посмотреть сообщение
    Слушь, никак не врубился, а что это такое делается одноразово в инициализации? Там что, в цикле все доступные инструменты что-ли выставляются?! Вот здесь:

    for (SymbolCounter=1;SymbolCounter<=NumOfVal;SymbolCou nter++)
    {
    string valP=GetSymbolString(SymbolCounter);
    if (!isMgNum(valP,ID)) orderSend(valP,1,0.1,SL,TP,ID,1);
    }
    это раздел start :)
    просто вводится массив с названием пар и вот эти самые строки перебирают каждый символ по очереди. Проверяется наличие уже открытого ордера и, если его нет - открываем. все.
    написание кода заняло 5 минут с перекурами, потому что давно готова библиотека с функциями, которая автоматом подключается к новому экспу.
  3. 1,666
    Комментарии
    13
    Темы
    1681
    Репутация Pro
    Аватар для Chrome DNA  
    Мастер форумных наук

    5 Медалей
    Слушай, а ты не можешь убрать всё лишнее (на время) и оставить только 2 вещи (я попрошу, это чтоб мне голову ночью набекрень не свернуть):

    - 1) Выставь ордер на покупку символа "AUD/CAD" лотом 0.01;
    - 2) Выставь ордер на продажу символа "AUD/CHF" лотом 0.02.

    Всё. Больше ничего не нужно. Ни тейков, стопов, модификаций и прочего. Только как будет выглядить код. Я его проверю и как обещал перечислю доллары. ;)
  4. 96
    Комментарии
    1
    Темы
    96
    Репутация Pro
     
    В начале пути

    2 Медалей
    легко

    Код:
    //+------------------------------------------------------------------+
    //|                                                ForChromeDNA2.mq4 |
    //|                                          Copyright © 2008, Silem |
    //|                                                     silem@k66.ru |
    //+------------------------------------------------------------------+
    #property copyright "Copyright © 2008, Silem"
    #property link      "silem@k66.ru"
    
    //---- input parameters
    extern int       ID=500;
    extern int       SL=0;
    extern int       TP=0;
    
    #define NumOfVal  3
    
    string SymbolsArray[NumOfVal] ={"","AUDCAD","AUDCHF"};
    int napr[NumOfVal]            ={0,1,-1};
    double lot[NumOfVal]          ={0,0.01,0.02};
    //+------------------------------------------------------------------+
    //| expert initialization function                                   |
    //+------------------------------------------------------------------+
    int init()
      {
    //----
       
    //----
       return(0);
      }
    //+------------------------------------------------------------------+
    //| expert deinitialization function                                 |
    //+------------------------------------------------------------------+
    int deinit()
      {
    //----
       
    //----
       return(0);
      }
    //+------------------------------------------------------------------+
    //| expert start function                                            |
    //+------------------------------------------------------------------+
    int start()
     {
      int SymbolCounter;
      if (!IsTradeAllowed()) return;
      for (SymbolCounter=1;SymbolCounter<=NumOfVal;SymbolCounter++)
       {
        string valP=GetSymbolString(SymbolCounter);
        if (!isMgNum(valP,ID)) orderSend(valP,GetNapr(SymbolCounter),GetLot(SymbolCounter),SL,TP,ID,1);
       }
      return(0);
     }
    //+------------------------------------------------------------------+
    
    int orderSend(string val, int napr, double lot, double sl, double tp, int mn,int abs=0)
     {
      RefreshRates();
      double _bid=MarketInfo(val,MODE_BID);
      double _digits=MarketInfo(val,MODE_DIGITS);
      double _point=MarketInfo(val,MODE_POINT);
      double _ts=MarketInfo(val,MODE_TICKSIZE);
      double _spr=MarketInfo(val,MODE_SPREAD)*_ts;
      double SL=0;
      double TP=0;
      string com=iifStr(napr>0,"BUY market order. ID ","SELL market order. ID ");
      color c=iifC(napr>0,Blue,Red);
      int ordertype=iif(napr>0,OP_BUY,OP_SELL);
      double entPrice=NormalizeDouble(_bid,_digits);
      if (sl>0)
       {
        SL=iif(abs>0,NormalizeDouble(entPrice-(sl*_ts)*napr,_digits),sl);
       }
      if (tp>0)
       {
        TP=iif(abs>0,NormalizeDouble(entPrice+(tp*_ts)*napr,_digits),tp);
       }
      string comm=StringConcatenate(com,mn);
      Print("Try to open market order. Current Bid ",_bid," Type OP_BUY, price ",entPrice," lot ",lot," stop ",SL," profit ",TP);
      int ticket=OrderSend(val,ordertype,lot,entPrice,5,0,0,comm,mn,0,c);
      if (ticket<=0)
       {
        Print("Order is not Opened ",mn);
        Print("Error - ",GetLastError());
        Print("entry - ",entPrice," stop - ",SL," Take - ",TP);
        return(-1);
       } else
       {
        Print("Order is Opened ",mn);
        ticket=OrderModify(ticket,OrderOpenPrice(),SL,TP,0,c);    
        return(1);
       }
     }
    
    double iif (bool condition, double ifTrue, double ifFalse)
     {
      if (condition) return( ifTrue );
      return (ifFalse);
     }
    string iifStr (bool condition, string ifTrue, string ifFalse)
     {
      if (condition) return (ifTrue);
      return (ifFalse);
     }
    color iifC (bool condition, color ifTrue, color ifFalse)
     {
      if (condition) return( ifTrue );
      return (ifFalse);
     }
    
    string GetSymbolString (int Number)
     {
      string res="";
      res=SymbolsArray[Number];   
      return(res);
     }
    double GetLot (int Number)
     {
      double res=0;
      res=lot[Number];   
      return(res);
     }
    int GetNapr (int Number)
     {
      int res=0;
      res=napr[Number];   
      return(res);
     }
    
    bool isMgNum(string val, int num, int mode=-1)
     {       
      int t, cnt1;
      t=OrdersTotal();
      for(cnt1=0;cnt1<t;cnt1++)
       {
        OrderSelect(cnt1, SELECT_BY_POS, MODE_TRADES);
        if (OrderSymbol() != val) continue;
        if (OrderMagicNumber()!=num) continue;
        if (mode != -1 && OrderType() != mode) continue;
        return (True);
       }  
      return (False);
     }
    в строках
    string SymbolsArray[NumOfVal] ={"","AUDCAD","AUDCHF"};
    int napr[NumOfVal] ={0,1,-1};
    double lot[NumOfVal] ={0,0.01,0.02};
    подставляешь значения, которые тебе нужны. только не забудь изменить значение NumOfVal, если число валют изменится
  5. 1,666
    Комментарии
    13
    Темы
    1681
    Репутация Pro
    Аватар для Chrome DNA  
    Мастер форумных наук

    5 Медалей
    Ничего не трогая, откомпилил. 0 ошибок. А теперь накладываю советник на график серебра (от балды взял). И вот в журнале сразу же пошли вот такие ошибки, а ни одного ордера не выставилось:
     
  6. 96
    Комментарии
    1
    Темы
    96
    Репутация Pro
     
    В начале пути

    2 Медалей
    Цитата Сообщение от Chrome DNA Посмотреть сообщение
    Ничего не трогая, откомпилил. 0 ошибок. А теперь накладываю советник на график серебра (от балды взял). И вот в журнале сразу же пошли вот такие ошибки, а ни одного ордера не выставилось:
    прошу прощения. ошибка есть. поправь строку

    #define NumOfVal 2 (вместо 3)

    две ведь пары :)

    это раз.
    а второе - глянь в "Обзор рынка" - есть там у тебя символы, которые ты торговать пытаешься? если их нет, то и котировок по ним нет в терминале
  7. 1,666
    Комментарии
    13
    Темы
    1681
    Репутация Pro
    Аватар для Chrome DNA  
    Мастер форумных наук

    5 Медалей
    Ща подправлю и перекомпилю, потом проверю на серебре опять. Да, конечно, все пары эти есть в списке обзора и серебро тоже.
  8. 1,666
    Комментарии
    13
    Темы
    1681
    Репутация Pro
    Аватар для Chrome DNA  
    Мастер форумных наук

    5 Медалей
    Нет, тоже самое, пишет AUDCAD unknown symbol name.
  9. 96
    Комментарии
    1
    Темы
    96
    Репутация Pro
     
    В начале пути

    2 Медалей
    странно... просто мистика какая-то
        
  10. 2,151
    Комментарии
    6
    Темы
    2187
    Репутация Pro
    Аватар для SPace  
    Мастер форумных наук

    4 Медалей
    Я у себя попробовал - работает... :fist:

Вверх
РегистрацияX

чтобы писать, читать, комментировать