Вопросы от начинающих MQL4 MT4 MetaTrader 4 - страница 222

 

Можете проверить торговый робот

//+------------------------------------------------------------------+

//|                                                     Experts1.mq4 |

//|                        Copyright 2017, MetaQuotes Software Corp. |

//|                                             https://www.mql5.com |

//+------------------------------------------------------------------+

#property copyright "Copyright 2017, MetaQuotes Software Corp."

#property link      "https://www.mql5.com"

#property version   "1.00"

#property strict

//+------------------------------------------------------------------+

//|                                             https://www.mql5.com |

//+------------------------------------------------------------------+

#property copyright "Copyright 2020, MetaQuotes Software Corp."

#property link      "https://www.mql5.com"


input  double Lots=0.01; 

//+------------------------------------------------------------------+

//|                                  |

//+------------------------------------------------------------------+

       

                                               

int OnInit()

   ( OrderSend(Symbol(),OP_BUY,Lots,3,0,Ask+0.0084,Ask-0.0084)


  double lot=Lots;

  if profit then Lots=lot+0.01 else Lots=lot-0.01 

  if Lots=0 then Lots=0.01

  if Lots>0.03 then Lots=0.01

//---

   

//---

   return();

  }


Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
  • www.mql5.com
One Click Close The script allows users to easily close positions if their profit/loss reaches or exceeds a value specified in pips. Please set slippage value first. Sometimes some positions do not close due to high volatility of the market. Please set larger slippage or restart the script. The free demo version is: ...
 
Здравствуйте уважаемые профи, подскажите как прописать условие при котором отложенный ордер будет однократно передвинут при определённом движении цены, например ордер Sellstop установлен на 1.28  цена ушла на 1.50 и отложенный ордер передвинулся к цене на определённую дистанцию от цены, но не двигался за ценой постоянно а передвинулся однократно, т.е передвинулся например на десять пипсов и встал даже если цена пошла дальше. С уважением Александр!
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Приказы на проведение торговых операций оформляются ордерами. Каждый ордер имеет множество свойств для чтения, информацию по ним можно получать с помощью функций Идентификатор позиции, который ставится на ордере при его исполнении. Каждый исполненный ордер порождает сделку, которая открывает новую или изменяет уже существующую позицию...
 

Добрый день, уважаемые эксперты! 

Прошу помощи, подсказки как это сделать, где прочитать, написания части кода. 

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

extern double Lots     = 0.1;
extern int StopLoss    = 250;
extern int TakeProfit  = 150;
extern int Magic       = 1;

double SL, TP;

int ticket;


//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   double price = Ask;

   if(BUY() == 0)
     {
      SL = NormalizeDouble(Ask - StopLoss*Point, 5);
      TP = NormalizeDouble(Ask + TakeProfit*Point, 5);
      ticket = OrderSend(Symbol(), OP_BUY, Lots, price, 3, SL, TP, "", Magic, 0, Red);
      if(ticket<0)
         Print("Не удалось открыть ордер");
     }
  }
//+------------------------------------------------------------------+
int BUY()
  {
   int count = 0;
   for(int i=OrdersTotal()-1; i>=X; i--)
     {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true &&
         OrderMagicNumber() == Magic &&
         OrderType() == OP_BUY)
        {
         count++;
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
 
d4vv:
   

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

input string Mycomment="Preved Medved";


ticket = OrderSend(Symbol(), OP_BUY, Lots, price, 3, SL, TP, Mycomment, Magic, 0, Red);

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

 
Aleksei Stepanenko:

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

Огромное Вам спасибо. Именно это мне и нужно.

 
Knelson:
подскажите как прописать условие при котором отложенный ордер будет однократно передвинут при определённом движении цены,

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

struct Orders
   {
   int ticket;
   bool moved;
   } orders[];

2. Следить за вновь появляющимися ордерами и записывать в этот массив информацию об открытом ордере с флагом "не передвигался".

bool finded;
int index==ArraySize(orders)-1;
for(int i=OrdersTotal()-1; i>=0; i--)
   {
   if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
   if(OrderSymbol()!=symbol) continue;
   if(OrderMagicNumber()!=magic) continue;
   if(OrderType()!=OP_BUYSTOP && OrderType()!=OP_SELLSTOP) continue;
   finded=false;
   for(int j=index; j>=0; j--)
      {
      if(orders[j].ticket==OrderTicket())
         {
         finded=true;
         break;
         }
      }
   if(!finded)
      {
      ArrayResize(orders,++index+1);
      orders[index].ticket=OrderTicket();
      orders[index].moved=false;
      }
   }

3. Удалять информацию из массива, если ордер закрыт, удалён, преобразован.

4. Проверять условие для передвижения, если условие настало и флаг "не передвигался", то передвинуть и флаг изменить на "передвигался"

 
Aleksei Stepanenko:

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

2. Следить за вновь появляющимися ордерами и записывать в этот массив информацию об открытом ордере с флагом "не передвигался".

3. Удалять информацию из массива, если ордер закрыт, удалён, преобразован.

4. Проверять условие для передвижения, если условие настало и флаг "не передвигался", то передвинуть и флаг изменить на "передвигался"

по моему не надежно

я б такую задачу решал бы более простым способом: выставлял бы отложку с магиком №2 и удалял бы отложку с магиком №1 по условию при котором нужно двигать ордер

код будет простой - по приходу тика цикл по ордерам с магиком №1 если нашли и нужно двигать, то удалим этот ордер и выставим новый ордер с магик №2

 

Да, хороший вариант.

 
Aleksei Stepanenko:

Да, хороший вариант.

UPD: код будет простой - по приходу тика цикл по ордерам с магиком №1 если нашли и нужно двигать, то удалим этот ордер и выставим новый ордер с магик №2

....то попробуем выставить новый ордер с магик №2 и если ОК, то удалим найденный ордер с магик №1

так меньше проверок придумыввать - например уровни стоп-левел расширились и не получатся ордер один раз передвинуть, а мы уже удалили бы найденный ордер

кактотак ;)

 
Наблюдаю за человеческим мозгом (в основном своим, но не только), и нахожу одно свойство - туннелирование. Процесс мышления происходит внутри стереотипов мышления, как бы в туннеле. И выскочить из него собственными усилиями непросто. "Я" неотделимо от меня и кажется, что ход мыслей правильный, совершенно правильный. Но тут приходят знания со стороны, и начинаешь понимать, что был в плену своих идей. Чудеса...
Причина обращения: