1. Уважаемый гость! Чтобы просмотреть скрытую часть информации Вам нужно зарегистрироваться.

    Быстрая регистрация!

Помощь в программирование.

Тема в разделе "Пишем советники индикаторы скрипты по Вашим идеям", создана пользователем jenek769, 30 апр 2018.

  1. jenek769

    jenek769 Гость

    Регистрация:
    28 апр 2018
    Сообщения:
    3
    Симпатии:
    0
    Пол:
    Мужской
    int CalculateCurrentOrders(string symbol)
    {
    int buys=0,sells=0;
    //---
    for(int i=0;i<OrdersTotal();i++)
    {
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
    if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
    {
    if(OrderType()==OP_BUY) buys++;
    if(OrderType()==OP_SELL) sells++;
    }
    }
    //--- return orders volume
    if(buys>0) return(buys);
    else return(-sells);
    }

    Что в коде поменять чтоб больше ордеров открывалось в терминале?
     
  2. Admin

    Admin Администратор Команда форума

    Регистрация:
    3 янв 2013
    Сообщения:
    1.918
    Симпатии:
    406
    Пол:
    Мужской
    В этом коде мало что либо менять, нужно менять чуть больше логики все й программы ...
    попробуйте так
    if(buys>1) return(buys);
    else return(-sells);
     
  3. jenek769

    jenek769 Гость

    Регистрация:
    28 апр 2018
    Сообщения:
    3
    Симпатии:
    0
    Пол:
    Мужской
    Так я уже пробыл. Тогда вот весь код советника. Конечно переделка из стандартного мувинг аверйндж с терминала мт4.

    Стратегия такова на средне скользящих. При 1-ом пересечение МА1 с МА2 открываем BUY и SELL. при 2-ом пересечение закрываем BUY(SELL) и тут же сразу открываем снова BUY и SELL. При 3-им пересечение закрываем SELL(BUY) и тут же сразу открываем снова BUY и SELL. И так далее. У меня только выходит так: открыли BUY и SELL, на 2-ом закрыли BUY и уже на 3-м закрывается SELL и только тут снова открываться BUY и SELL.

    #property copyright "jenek769"
    #property link "jenek769.ru"
    #property description "buy_sell, close peresechenie 2x - !MA!"

    #define MAGICMA 26042018
    //----------------- Настройка----------------
    input double Lots =1;

    input int MovingPeriod2 =1;
    input int MovingShift2 =0;
    //---------------------------------
    input int MovingPeriod3 =1;
    input int MovingShift3 =100;

    //+------------------------------------------------------------------+
    //| Calculate open positions |
    //+------------------------------------------------------------------+
    int CalculateCurrentOrders(string symbol)
    {
    int buys=0,sells=0;
    //---
    for(int i=0;i<OrdersTotal();i++)
    {
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
    if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
    {
    if(OrderType()==OP_BUY) buys++;
    if(OrderType()==OP_SELL) sells++;
    }
    }
    //--- retur orders volume
    if(buys>0) return(buys);
    else return(-sells);

    //if(sells>0) return(buys);
    //else return(sells);
    }
    //|--------------------открытие сделок-------------------------------|
    void CheckForOpen()
    {
    // double ma;
    double ma70;
    double ma50;
    int res;
    //--- go trading only for first tiks of new bar
    if(Volume[0]>1) return;

    //--------------- настройка мувинга для открытия сделок----------------------------------
    ma70=iMA(NULL,0,MovingPeriod2,MovingShift2,MODE_SMMA,PRICE_CLOSE,0);
    ma50=iMA(NULL,0,MovingPeriod3,MovingShift3,MODE_SMMA,PRICE_CLOSE,0);
    //---------------------------------------------------------------------------------------
    if(ma70>ma50)
    {
    res=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"vxod_V_1.2",MAGICMA,0,Red);
    res=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"vxod_V_1.2",MAGICMA,0,Blue);
    return;
    }

    //----------------------------------------------------------------------------------------
    if(ma70<ma50)
    {
    res=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"vxod_V_1.2",MAGICMA,0,Blue);
    res=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"vxod_V_1.2",MAGICMA,0,Red);
    return;
    }
    }
    //| ---------------------закрытие сделок-----------------------------|
    void CheckForClose()
    {
    double ma71;
    double ma51;
    //--- go trading only for first tiks of new bar
    if(Volume[0]>1) return;
    //--------------- настройка мувинга для закрытие-------------------------
    ma71=iMA(NULL,0,MovingPeriod2,MovingShift2,MODE_SMMA,PRICE_CLOSE,0);
    ma51=iMA(NULL,0,MovingPeriod3,MovingShift3,MODE_SMMA,PRICE_CLOSE,0);
    //----------------------------------------------------------------------
    for(int i=0;i<OrdersTotal();i++)
    {
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
    if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue;
    //----------------- закрытие покупки---------------------------
    if(OrderType()==OP_BUY)
    {
    if(ma71<ma51)
    {
    if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,White))
    Print("OrderClose error ",GetLastError());
    }
    break;
    }
    //----------------- закрытие продажи---------------------------
    if(OrderType()==OP_SELL)
    {
    if(ma71>ma51)
    {
    if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,White))
    Print("OrderClose error ",GetLastError());
    }
    break;
    }
    }
    }
    //| OnTick function |
    void OnTick()
    {
    //--- check for history and trading
    if(Bars<100 || IsTradeAllowed()==false)
    return;
    //--- calculate open orders by current symbol
    if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
    else CheckForClose();
    //---
    }
     

Поделиться этой страницей