Пожалуйста, помогите с конкретным советником частичного закрытия
Results 1 to 3 of 3

Thread: Пожалуйста, помогите с конкретным советником частичного закрытия

  1. #1
    Привет, ребята, я был бы признателен за вашу помощь, пожалуйста?!
    Вот проблема: я хотел бы частично закрыть свою позицию, когда быстрый сточ достигает перепроданности или перекупленности, а остальную часть позиции закрыть вручную. Казалось бы, легкая работа, но!!! Достигнув уровня, советник закрывает один лот и сразу за ним второй лот. Как мне остановить закрытие второй части?

    Заранее спасибо,
    Аволеоо

    Например, я изменил OrderLots() на 0,01, и предположим, что я войду в рынок с 0,02.

    вот код:
    // -------------------------------------------------------------- -----
    //| Этот MQL создан с помощью Expert Advisor Builder |
    //|
    http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/|
    //| |
    //| Ни при каких обстоятельствах автор не будет нести ответственность за какой-либо ущерб. |
    //| Используйте на свой риск. |
    //| |
    // ------------------- НЕ УДАЛЯТЬ ЭТОТ ЗАГОЛОВОК --------------------

    #define SIGNAL_NONE 0
    #define SIGNAL_BUY 1
    #define SIGNAL_SELL 2
    #define SIGNAL_CLOSEBUY 3
    #define SIGNAL_CLOSESELL 4

    #property copyright Конструктор советников
    # ссылка на свойство http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/

    внешний интервал MagicNumber = 0;
    extern bool SignalMail = False;
    extern bool EachTickMode = True;
    внешние двойные лоты = 0,01;
    внешнее внутреннее проскальзывание = 3;
    extern bool UseStopLoss = False;
    внешний интервал StopLoss = 30;
    extern bool UseTakeProfit = False;
    extern int TakeProfit = 60;
    extern bool UseTrailingStop = False;
    внешний интервал TrailingStop = 30;

    интервал BarCount;
    внутренний текущий;
    логическое значение TickCheck = False;
    // -------------------------------------------------------------- -----
    //| функция инициализации эксперта |
    // -------------------------------------------------------------- -----
    init () {
    BarCount = Бары;

    если (EachTickMode) Текущий = 0; иначе Текущий = 1;

    возврат (0);
    }
    // -------------------------------------------------------------- -----
    //| функция экспертной деинициализации |
    // -------------------------------------------------------------- -----
    интервал deinit () {
    возврат (0);
    }
    // -------------------------------------------------------------- -----
    //| функция экспертного запуска |
    // -------------------------------------------------------------- -----
    целое начало () {
    интервал Заказ = SIGNAL_NONE;
    инт Всего, Билет;
    двойной StopLossLevel, TakeProfitLevel;



    if (EachTickMode Bars != BarCount) TickCheck = False;
    Итого = Всего заказов();
    Заказ = SIGNAL_NONE;

    // -------------------------------------------------------------- -----
    //| Переменная Начало |
    // -------------------------------------------------------------- -----




    double CloseBuy1_1 = iStochastic(NULL, 0, 8, 5, 5, MODE_SMA, 0, MODE_MAIN, Current 0);
    двойной CloseBuy1_2 = 80;

    double CloseSell1_1 = iStochastic(NULL, 0, 8, 5, 5, MODE_SMA, 0, MODE_MAIN, Current 0);
    двойной CloseSell1_2 = 20;


    // -------------------------------------------------------------- -----
    //| Конец переменной |
    // -------------------------------------------------------------- -----

    //Проверить позицию
    bool IsTrade = Ложь;

    for (int i = 0; i lt; Total; i ) {
    OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
    if(OrderType() lt;= OP_SELL OrderSymbol() == Symbol()) {
    ИсТрейд = Истина;
    если(ТипЗаказа() == OP_BUY) {
    //Закрывать

    // -------------------------------------------------------------- -----
    //| Сигнал Начало(Выход Купить) |
    // -------------------------------------------------------------- -----

    if (CloseBuy1_1 gt;= CloseBuy1_2) Ордер = SIGNAL_CLOSEBUY;


    // -------------------------------------------------------------- -----
    //| Конец сигнала (выход из покупки) |
    // -------------------------------------------------------------- -----

    if (Order == SIGNAL_CLOSEBUY ((EachTickMode !TickCheck) || (!EachTickMode (Bars != BarCount)))) {
    OrderClose(OrderTicket(), 0.01, Bid, Slippage, MediumSeaGreen);
    if (SignalMail) SendMail([Signal Alert], [ Symbol() ] DoubleToStr(Bid, Digits) Close Buy);
    if (!EachTickMode) BarCount = Bars;
    IsTrade = Ложь;
    continue;
    }
    //Трейлинг-стоп
    if(UseTrailingStop TrailingStop gt; 0) {
    if(Bid - OrderOpenPrice() gt; Point * TrailingStop) {
    if(OrderStopLoss() lt; Bid - Point * TrailingStop) {
    OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0,

    Медиумморезелен);
    if (!EachTickMode) BarCount = Bars;
    Продолжать;
    }
    }
    }
    } еще {
    //Закрывать

    // -------------------------------------------------------------- -----
    //| Начало сигнала (выход из продажи) |
    // -------------------------------------------------------------- -----

    if (CloseSell1_1 lt;= CloseSell1_2) Ордер = SIGNAL_CLOSESELL;


    // -------------------------------------------------------------- -----
    //| Конец сигнала (выход из продажи) |
    // -------------------------------------------------------------- -----

    if (Order == SIGNAL_CLOSESELL ((EachTickMode !TickCheck) || (!EachTickMode (Bars != BarCount)))) {
    OrderClose(OrderTicket(), 0.01, Ask, Slippage, DarkOrange);
    if (SignalMail) SendMail([Signal Alert], [ Symbol() ] DoubleToStr(Ask, Digits) Close Sell);
    if (!EachTickMode) BarCount = Bars;
    IsTrade = Ложь;
    Продолжать;
    }
    //Трейлинг-стоп
    if(UseTrailingStop TrailingStop gt; 0) {
    if((OrderOpenPrice() - Ask) gt; (Point * TrailingStop)) {
    if((OrderStopLoss() gt; (Ask Point * TrailingStop)) || (OrderStopLoss() == 0)) {
    OrderModify(OrderTicket(), OrderOpenPrice(), Ask Point * TrailingStop, OrderTakeProfit(), 0,

    Темно-оранжевый);
    if (!EachTickMode) BarCount = Bars;
    Продолжать;
    }
    }
    }
    }
    }
    }

    // -------------------------------------------------------------- -----
    //| Сигнал Начало(Вход) |
    // -------------------------------------------------------------- -----




    // -------------------------------------------------------------- -----
    //| Сигнал Конец |
    // -------------------------------------------------------------- -----

    //Купить
    if (Order == SIGNAL_BUY ((EachTickMode !TickCheck) || (!EachTickMode (Bars != BarCount)))) {
    если(!Торговля) {
    //Проверяем свободную маржу
    if (AccountFreeMargin() lt; (1000 * лотов)) {
    Print(У нас нет денег. Свободная маржа = , AccountFreeMargin());
    возврат (0);
    }

    if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; иначе StopLossLevel = 0.0;
    if (UseTakeProfit) TakeProfitLevel = Ask TakeProfit * Point; else TakeProfitLevel = 0.0;

    Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, Buy(# MagicNumber ),

    MagicNumber, 0, DodgerBlue);
    если (Билет gt; 0) {
    если (OrderSelect(Билет, SELECT_BY_TICKET, MODE_TRADES)) {
    Print(Открыт ордер на ПОКУПКУ : , OrderOpenPrice());
    if (SignalMail) SendMail([Signal Alert], [ Symbol() ] DoubleToStr(Ask, Digits) Open Buy);
    } еще {
    Print(Ошибка открытия ордера на ПОКУПКУ: , GetLastError());
    }
    }
    если (EachTickMode) TickCheck = True;
    if (!EachTickMode) BarCount = Bars;
    возврат (0);
    }
    }

    //Продавать
    if (Order == SIGNAL_SELL ((EachTickMode !TickCheck) || (!EachTickMode (Bars != BarCount)))) {
    если(!Торговля) {
    //Проверяем свободную маржу
    if (AccountFreeMargin() lt; (1000 * лотов)) {
    Print(У нас нет денег. Свободная маржа = , AccountFreeMargin());
    возврат (0);
    }

    if (UseStopLoss) StopLossLevel = Bid ​​ StopLoss * Point; иначе StopLossLevel = 0.0;
    if (UseTakeProfit) TakeProfitLevel = Bid ​​- TakeProfit * Point; иначе TakeProfitLevel = 0.0;

    Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, Sell(# MagicNumber

    ), MagicNumber, 0, DeepPink);
    если (Билет gt; 0) {
    если (OrderSelect(Билет, SELECT_BY_TICKET, MODE_TRADES)) {
    Print(Открыт ордер на ПРОДАЖУ: , OrderOpenPrice());
    if (SignalMail) SendMail([Signal Alert], [ Symbol() ] DoubleToStr(Bid, Digits) Open Sell);
    } еще {
    Print(Ошибка открытия ордера SELL: , GetLastError());
    }
    }
    если (EachTickMode) TickCheck = True;
    if (!EachTickMode) BarCount = Bars;
    возврат (0);
    }
    }

    if (!EachTickMode) BarCount = Bars;

    возврат (0);
    }
    // -------------------------------------------------------------- -----

  2. #2

  3. #3
    Осмелюсь сказать, что человек, написавший код, единственный, кто может его исправить. Для меня это выглядит как беспорядок, поэтому я не тратил много времени на поиски, и я уверен, что не собираюсь его запускать.

Действующие разрешения

  • Вы не можете создавать новые темы
  • Вы не можете размещать ответы
  • Вы не можете использовать вложения
  • Вы не можете редактировать ваши записи
  •  
  • BB-код - Вкл.
  • Смайлики - Вкл.
  • Код [IMG] - Вкл.
  • Код [VIDEO] - Вкл.
  • HTML-код - Выкл.
Веб-сайт использует cookies
Веб-сайт использует cookies, в настоящее время некоторые из них уже установлены. Вы можете ознакомиться с более подробной информацией об использовании нами cookies здесь. Чтобы принять условия использования cookies, пожалуйста, нажмите на кнопку справа. Если вы продолжаете пользоваться веб-сайтом, вы по умолчанию принимаете условия использования cookies.