Jump to content
muvingman

Напишу советник, скрипт, индикатор на MQL бесплатно

Recommended Posts

Sapsan_071

Пытаюсь написать советник. Но последний блок никак не хочет работать. Смысл блока в том, что при достижении выше или ниже определенного уровня, необходимо всем открытым ордерам (как Buy, так и Sell) выставить Stoploss и с определенным шагом тралить все ордера одновременно. Помогите пожалуйста. Где я не прав. С уважением!

Скрытый текст



      if ( LineUp_2 < Bid )
         {
         SPRD = NormalizeDouble(Ask - Bid, Digits);
         for ( i = 1 ; i < OrdersTotal(); i++ )
            {
            if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
               Alert ("Выбран ордер № ", i);
               {
               if (OrderSymbol()==Symbol())
                  {
                  tip = OrderType();
                  OOP = NormalizeDouble (OrderOpenPrice(), Digits);
                  if ( tip == OP_BUY )
                     {
                     b++;
                     TicketB = OrderTicket();
                     if ( NormalizeDouble(Bid - LineUp_2, Digits) > NormalizeDouble(Trail, Digits))
                        {
                        SL = NormalizeDouble( Bid - Trail, Digits);
                        if (OrderModify(TicketB,OrderOpenPrice(), SL, 0, DarkOrange))
                        Comment("StopLoss успешно установлен =", SL);
                        }
                     }
                  if ( tip == OP_SELL )
                     {
                     s++;
                     TicketS = OrderTicket();
                     if ( NormalizeDouble(Ask + SPRD - LineUp_2, Digits) > NormalizeDouble(Trail + SPRD, Digits))
                        {
                        SL = NormalizeDouble( Ask - Trail - SPRD, Digits);
                        if (OrderModify(TicketB,OrderOpenPrice(), SL, 0, DarkOrange))
                        Comment("StopLoss успешно установлен =", SL);
                        }
                     }
                  }
               }
            }
         }
      if ( LineDn_2 > Ask )
         {
         SPRD = NormalizeDouble(Ask - Bid, Digits);
         for ( i = 1 ; i < OrdersTotal(); i++ )
            {
            if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
               Alert ("Выбран ордер № ", i);
               {
               if (OrderSymbol()==Symbol())
                  {
                  tip = OrderType();
                  OOP = NormalizeDouble (OrderOpenPrice(), Digits);
                  if ( tip == OP_BUY )
                     {
                     b++;
                     TicketB = OrderTicket();
                     if ( NormalizeDouble(LineDn_2 + SPRD - Bid, Digits) > NormalizeDouble(Trail + SPRD, Digits))
                        {
                        SL = NormalizeDouble( Bid + Trail + SPRD, Digits);
                        if (OrderModify(TicketB,OrderOpenPrice(), SL, 0, DarkOrange))
                        Comment("StopLoss успешно установлен =", SL);
                        }
                     }
                  if ( tip == OP_SELL )
                     {
                     s++;
                     TicketS = OrderTicket();
                     if ( NormalizeDouble(LineDn_2 - Ask, Digits) > NormalizeDouble(Trail , Digits))
                        {
                        SL = NormalizeDouble( Ask + Trail, Digits);
                        if (OrderModify(TicketB,OrderOpenPrice(), SL, 0, DarkOrange))
                        Comment("StopLoss успешно установлен =", SL);
                        }
                     }
                  }
               }
            }
         }


 

 

Edited by AntFX
п. 16

Share this post


Link to post
Share on other sites
Sapsan_071

Или хотя бы подскажите где можно посмотреть пример этого кода.

Share this post


Link to post
Share on other sites
Ulantrade

Всем Здравия.

 

Может есть у ково советник по индикатору Ишумоку, сделки должны открываться при смене цвета облака? нужно чтобы были настраиваемые параметры тенкан-сен, кунжен-сен, секоу спан-б, также стоп , тэйк, трал. 

  • Upvote 1

Share this post


Link to post
Share on other sites
БорисMQL4
В 24.08.2018 в 22:30, Sapsan_071 сказал:

Или хотя бы подскажите где можно посмотреть пример этого кода.

Пример кода.
 

void TrStop(int Magic_r)
{
int i,StopLevel,Spread;
double sl_r;
bool res;

for(i=0; i<OrdersTotal(); i++)
   {
   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
      if(OrderMagicNumber()!=Magic_r || OrderSymbol()!=Symbol()) continue;
      
      RefreshRates();
      
      StopLevel=(int)MarketInfo(Symbol(),MODE_STOPLEVEL);
      Spread=(int)MarketInfo(Symbol(),MODE_SPREAD);
      
      //----------------
      Error_4_count=0;
      Error_129_count=0;
      Error_135_count=0;
      Error_136_count=0;
      Error_137_count=0;
      Error_138_count=0;
      Error_146_count=0;
      //----------------
      
      if(OrderType()==OP_BUY)
         {
         if(Bid>=OrderOpenPrice()+Trail_Start*Point && (OrderStopLoss()<Bid-(Trail_Stop+Trail_Step)*Point || OrderStopLoss()==0) && Bid-Trail_Stop*Point>OrderOpenPrice())
            {
            sl_r=Bid-Trail_Stop*Point;
            sl_r=NormalizeDouble(sl_r,Digits);
            if(Bid-sl_r<MathMax(StopLevel,Spread*2)*Point || sl_r==NormalizeDouble(OrderStopLoss(),Digits)) continue;
            
            if(Comments_g) CommentsPrint("Comment","Приказ отправляется...",10,"Arial",clrDodgerBlue);
            
            while(true)
               {
               res=OrderModify(OrderTicket(),OrderOpenPrice(),sl_r,OrderTakeProfit(),0);
               if(res)
                  {
                  if(Comments_g) CommentsPrint("Comment","Приказ успешно исполнен.",10,"Arial",clrDodgerBlue);
                  if(Sounds_g) PlaySound("expert.wav");
                  break;
                  }
               if(Fun_Error(GetLastError())==1) continue;
               break;
               }
            }
         continue;
         }
      if(OrderType()==OP_SELL)
         {
         if(Ask<=OrderOpenPrice()-Trail_Start*Point && (OrderStopLoss()>Ask+(Trail_Stop+Trail_Step)*Point || OrderStopLoss()==0) && Ask+Trail_Stop*Point<OrderOpenPrice())
            {
            sl_r=Ask+Trail_Stop*Point;
            sl_r=NormalizeDouble(sl_r,Digits);
            if(sl_r-Ask<MathMax(StopLevel,Spread*2)*Point || sl_r==NormalizeDouble(OrderStopLoss(),Digits)) continue;
            
            if(Comments_g) CommentsPrint("Comment","Приказ отправляется...",10,"Arial",clrDodgerBlue);
            
            while(true)
               {
               res=OrderModify(OrderTicket(),OrderOpenPrice(),sl_r,OrderTakeProfit(),0);
               if(res)
                  {
                  if(Comments_g) CommentsPrint("Comment","Приказ успешно исполнен.",10,"Arial",clrDodgerBlue);
                  if(Sounds_g) PlaySound("expert.wav");
                  break;
                  }
               if(Fun_Error(GetLastError())==1) continue;
               break;
               }
            }
         }
      }
   }
}

 

  • Thanks 1

Пишу на заказ - советники, индикаторы, скрипты и другое ПО для терминала MetaTrader 4.

Share this post


Link to post
Share on other sites
Cenmax

Приветствую!

Подскажите,есть ли скрипт,который вешаешь на график и при закрытии одного ордера закрывает все остальные

Edited by Cenmax

"Зло растет и увеличивается, если вы прячетесь от него или делаете вид, что не замечаете.."

Share this post


Link to post
Share on other sites
AntFX
1 минуту назад, Cenmax сказал:

Приветствую!

Подскажите,есть ли скрипт,который вешаешь на график и при закрытии одного ордера закрывает все остальные .

Пару постов назад что-то подобное спрашивали


1

Share this post


Link to post
Share on other sites
Cenmax
1 час назад, AntFX сказал:

Пару постов назад что-то подобное спрашивали

Спасибо,почитал это совсем не то, нужно,чтобы скрипт закрыл принудительно все ордера,после того как закроется первый ордер из всех открытых.


"Зло растет и увеличивается, если вы прячетесь от него или делаете вид, что не замечаете.."

Share this post


Link to post
Share on other sites
Fedor Anastas

подскажите кто-нить нашел старую штучку,хочу прогнать посмотреть на истории,одну закономерность, но почему-то советник не работает.Как это не обходимо. Проблема в том что по матрингейлу предусматривается закрытие и возврат всей минусовой серии ,а тут такое впечатление как будто ТП после первой сделки сбивается и уменьшается. Помогите разобраться, что в скрипте не так.Заранее благодарю.

Nevalyashka.mq4

Share this post


Link to post
Share on other sites
БорисMQL4
В 07.09.2018 в 01:41, Cenmax сказал:

Нужно, чтобы скрипт закрыл принудительно все ордера, после того как закроется первый ордер из всех открытых.

Принимайте файл.
Алгоритм реализован в виде советника.
Советник закрывает принудительно все ордера, после того как закроется первый ордер из всех открытых.

e_AutoClose_v1.mq4

  • Thanks 1

Пишу на заказ - советники, индикаторы, скрипты и другое ПО для терминала MetaTrader 4.

Share this post


Link to post
Share on other sites
66ois

Добрый вечер. Кто может написать советник? Стратегия такая: в 00.00 открывается ордер по направлению индикатора parabolic sar с заранее выбранного Таймфрейма. Одновременно выставляются ТР и SL размер также выбирается пользователем. Должен  работать на всех Таймфреймах включая дневной. Буду благодарен тому кто поможет реализовать.

Edited by 66ois
Дополнил сообщение

Share this post


Link to post
Share on other sites
vas6385

всем привет.  ( сразу извините если обратился не по адресу , если знаете посоветуйте раздел форума) все программеры -отлично знают арифметику? , но не все арифметики знают программный код)))) есть стратегия которую тестирую есть робот который делает вход и переворот по заданному алгоритму . есть статистика отработок моделей 90 шт. тестирую его уже 6 месяцев на тайме 1ч. вход минимальным лотом 0.01 на стандартном счете. по статистики все модели отрабатывают . но прибыльность счета нулевая при данных настроиках . есть ли люди которые могут посчитать и подсказать что не так в стратегии где с каждым реверсом лотность удваивается? может и тестить далее ее не стоит.

статистика отработок.jpg

Share this post


Link to post
Share on other sites
MG4
9 часов назад, vas6385 сказал:

по статистики все модели отрабатывают . но прибыльность счета нулевая при данных настроиках . есть ли люди которые могут посчитать и подсказать что не так в стратегии где с каждым реверсом лотность удваивается? может и тестить далее ее не стоит.

удвоение лотности - это лишь управление капиталом

управление капиталом не даёт дополнительной ἄλφα к стратегии

попробуйте построить стратегию без удвоения лотности, удвоение лотности добавите потом, и посмотрите на результат

я к своей одной из своих стратегий (к этой) добавлял изменение лотности, результат меня не удовлетворил

Edited by MG4

 Новогодняя рекламная акциЯ
Напиши пост в ветке MTSavg - получи лайк в репу!

Share this post


Link to post
Share on other sites
EvgenShEV

Подскажите, где взять советник перевертыш?

Share this post


Link to post
Share on other sites
Art2018

Подскажите пожалуйста советник, который при срабатывании отложенного ордера закрывал бы все противоположные рыночные ордера.

Есть похожий советник e-OCO, но он закрывает только отложки.  

Share this post


Link to post
Share on other sites
Oneseth

Здравствуйте, кто нить может помочь мне написать небольшой скрипт. А скрипт такой что работал в определенное время и смотрел на мувиннг авередж когда цена пересекала ее.

Edited by AntFX
п. 8

Share this post


Link to post
Share on other sites
Art2018
В 01.10.2018 в 13:12, Art2018 сказал:

Подскажите пожалуйста советник, который при срабатывании отложенного ордера закрывал бы все противоположные рыночные ордера.

Есть похожий советник e-OCO, но он закрывает только отложки.  

Вот этот советник, может кто-нибудь переделает код на рыночные ордера?

Скрытый текст



//+------------------------------------------------------------------+
//|                                                       OCO_EA.mq4 |
//|                               Copyright © 2012, Gehtsoft USA LLC |
//|                                            http://fxcodebase.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2012, Gehtsoft USA LLC"
#property link      "http://fxcodebase.com"

extern bool OnlyCurrentSymbol=false;
extern bool UseSound=false;
extern string NameSoundFile="expert.wav";

int init()
{

 return(0);
}

int deinit()
{

 return(0);
}
  
bool ExistMarketOrder()
{
 for(int i=0;i<OrdersTotal();i++)
 {
  if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
  {
   if (!OnlyCurrentSymbol || OrderSymbol()==Symbol())
   {
    if(OrderType()==OP_BUY || OrderType()==OP_SELL) return (true);
   } 
  }
 }
 return (false);
}
  
void DeletePendingOrders()
{
 for (int i=OrdersTotal()-1;i>=0;i--)
 {
  if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
  {
   if (!OnlyCurrentSymbol || OrderSymbol()==Symbol())
   {
    if(OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP || OrderType()==OP_BUYLIMIT || OrderType()==OP_SELLLIMIT) bool result = OrderDelete(OrderTicket());
   } 
  }
 }
 return;
}
  
int start()
{
 if (ExistMarketOrder())
 {
  DeletePendingOrders();
  if (UseSound) PlaySound(NameSoundFile);
 }
 return(0);
}


 

 

Edited by AntFX
п. 16

Share this post


Link to post
Share on other sites
Ugar68
21 час назад, Oneseth сказал:

Здравствуйте, кто нить может помочь мне написать небольшой скрипт. А скрипт такой что работал в определенное время и смотрел на мувиннг авередж когда цена пересекала ее.

И чё? Ну пересекла цена МА в определённый промежуток времени, чё дальше то?

  • Upvote 1

Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку.
Чужие программы не переделываю.

Share this post


Link to post
Share on other sites
Oneseth
7 часов назад, Ugar68 сказал:

И чё? Ну пересекла цена МА в определённый промежуток времени, чё дальше то?

дальше пойдет моя ручная торговля, было бы лучше чтобы вообще по почте отправлялось при пересечении.

Share this post


Link to post
Share on other sites
Ugar68
47 минут назад, Oneseth сказал:

дальше пойдет моя ручная торговля, было бы лучше чтобы вообще по почте отправлялось при пересечении.

Ну вот уже выяснил что он должен послать email. А после отправки выгрузиться из памяти?


Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку.
Чужие программы не переделываю.

Share this post


Link to post
Share on other sites
Oneseth
1 минуту назад, Ugar68 сказал:

Ну вот уже выяснил что он должен послать email. А после отправки выгрузиться из памяти?

ну типа, например утром eur/usd пересек МА и отправляет мне письмо, дальше может и не мониторит эту пару, но чтобы мониторил все остальные популярные пары точно также как и с евро/юсд.

Share this post


Link to post
Share on other sites
Ugar68

В момент запуска скрипта он мониторит пересечение ценой МА. Как только это происходит посылает email и завершает работу по этому символу.

Вы вешаете скрипт на нужные пары.

Так? Или надо ещё задавать время с которого он начинает мониторить?


Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку.
Чужие программы не переделываю.

Share this post


Link to post
Share on other sites
Oneseth
58 минут назад, Ugar68 сказал:

В момент запуска скрипта он мониторит пересечение ценой МА. Как только это происходит посылает email и завершает работу по этому символу.

Вы вешаете скрипт на нужные пары.

Так? Или надо ещё задавать время с которого он начинает мониторить?

я бы хотел типа советника, чтобы каждый день так делал и мне не приходилось запускать по отдельности для всех пар. Один раз запустил советник и все. Советник начинает работать утром до вечера по всем парам, когда происходит пересчение отправляет мне письмо. Одного пересечения в день достаточно.

Share this post


Link to post
Share on other sites
Ugar68
14 часов назад, Oneseth сказал:

я бы хотел типа советника, чтобы каждый день так делал и мне не приходилось запускать по отдельности для всех пар. Один раз запустил советник и все. Советник начинает работать утром до вечера по всем парам, когда происходит пересчение отправляет мне письмо. Одного пересечения в день достаточно.

Аппетит растёт. Может кто то другой напишет такой. Если конечно кому то будет интересно такой писать.

Edited by Ugar68

Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку.
Чужие программы не переделываю.

Share this post


Link to post
Share on other sites
Zima-Ivan

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

Скрытый текст



#property copyright "Solree & Nord"

#define comment "TradeNet"

extern double lots = 0.01;
extern int takeProfit = 50;
extern int stopLoss = 0;
extern int step = 10;
extern int countOrders = 30;
extern string topOrders = "B";
extern string bottomOrders = "S";
extern bool newOrders = true;
extern bool work = true;

double precision;
bool check;

int init()
{
    precision = MathPow(10, -Digits);
    
    if (lots <= 0)
    {
        Alert("Введено не корректное значение переменной lots.");
        check = false;
    }
    
    if (takeProfit < 0)
    {
        Alert("Введено не корректное значение переменной takeProfit.");
        check = false;
    }
    
    if (stopLoss < 0)
    {
        Alert("Введено не корректное значение переменной stopLoss.");
        check = false;
    }
    
    if (step <= 0)
    {
        Alert("Введено не корректное значение переменной step.");
        check = false;
    }
    
    if (countOrders <= 0)
    {
        Alert("Введено не корректное значение переменной countOrders.");
        check = false;
    }
    
    if (topOrders != "B" && topOrders != "b" && topOrders != "S" && topOrders != "s")
    {
        Alert("Введено не корректное значение переменной topOrders.");
        check = false;
    }
    
    if (bottomOrders != "B" && bottomOrders != "b" && bottomOrders != "S" && bottomOrders != "s")
    {
        Alert("Введено не корректное значение переменной bottomOrders.");
        check = false;
    }
    
    check = true;
    
    return;
}

int start()
{
    if (check && work)
    {
        closeOrders();
        openOrders();
        
        check = false;
    }

    return;
}

void closeOrders()
{
    for (int i = OrdersTotal()-1; i >= 0; i--)
    {
        OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

        if (OrderComment() == comment && OrderType() > 1)
            while (!OrderDelete(OrderTicket()));
    }
}

void openOrders()
{
    double price = Ask + step*precision;
    double sl = 0;
    double tp = 0;
    int type = -1;
    int i;
    
    if (topOrders == "B" || topOrders == "b")
    {
        type = OP_BUYSTOP;
        
        if (takeProfit != 0)
            tp = price + takeProfit*precision;
        if (stopLoss != 0)
            sl = price - stopLoss*precision;
    }
    else
    {
        type = OP_SELLLIMIT;
        
        if (takeProfit != 0)
            tp = price - takeProfit*precision;
        if (stopLoss != 0)
            sl = price + stopLoss*precision;
    }

    for (i = 0; i < countOrders; i++)
    {
        OrderSend(Symbol(), type, lots, NormalizeDouble(price, Digits), 0, NormalizeDouble(sl, Digits), NormalizeDouble(tp, Digits), comment);
        
        price += step*precision;
        if (tp != 0)
            tp += step*precision;
        if (sl != 0)
            sl += step*precision;
    }
    
    price = Bid - step*precision;
    tp = 0;
    sl = 0;
    
    if (bottomOrders == "B" || bottomOrders == "b")
    {
        type = OP_BUYLIMIT;
        
        if (takeProfit != 0)
            tp = price + takeProfit*precision;
        if (stopLoss != 0)
            sl = price - stopLoss*precision;
    }
    else
    {
        type = OP_SELLSTOP;
        
        if (takeProfit != 0)
            tp = price - takeProfit*precision;
        if (stopLoss != 0)
            sl = price + stopLoss*precision;
    }
        
    for (i = 0; i < countOrders; i++)
    {
        OrderSend(Symbol(), type, lots, NormalizeDouble(price, Digits), 0, NormalizeDouble(sl, Digits), NormalizeDouble(tp, Digits), comment);
        
        price -= step*precision;
        if (tp != 0)
            tp -= step*precision;
        if (sl != 0)
            sl -= step*precision;
    }
}


 

 

Edited by AntFX
п. 16

Share this post


Link to post
Share on other sites
NewAlex

здравствуйте!
буду признателен за ссылку на уже существующий скрипт (или индикатор):

вывод значений свопов (желательно в USD, не в пунктах) по списку символов. список символов задается.

Написать с нуля просить не буду, т.к. стыдно просить других, когда самому просто лень это сделать самостоятельно.

Edited by NewAlex

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

×