Вопросы новичков к профессионалам Форекс

Ugar

Гуру форума
Мне в настройки вынесли стоп и профит а его нет помоему в функциях
Естественно все делается для реала
Получается что надо для понимающего человека 2 стопа(один для сервера брокера а второй виртуальный для робота)
Но мы народ темный-согласны на любой-лишь бы работал
Ничего там не вынесли. Там добавили пару внешних переменных, которые больше нигде не используются в работе программы.
Надо найти функции, описание которых я привёл в прошлом посте, вычислить уровни стопов и тейков в зависимости от направления ордера, и добавить их в эти функции. Это будет реальный стоп и тейк для счетов с исполнением по Instant.
Для Buy ордера стоп лосс Ask-StopLoss*_Point
Для Buy ордера тейк профит Ask+TakeProfit*_Point
Для Sell ордера стоп лосс Bid+StopLoss*_Point
Для Sell ордера тейк профит Bid-TakeProfit*_Point
 
Последнее редактирование:

سيرجي كيروف

Местный знаток
Ну а вот такой вопрос
Мне за деньги написали советника
Почему он работает в тестере а на реале нет?
Кто то подумал что я для тестера стараюсь чтоли?
 

Ugar

Гуру форума
Ну а вот такой вопрос
Мне за деньги написали советника
Почему он работает в тестере а на реале нет?
Кто то подумал что я для тестера стараюсь чтоли?
Этот вопрос надо задать тому кто писал. Лично я, если попросит заказчик, могу написать тестерный вариант. Например заказчик хочет проверить торговую идею в тестере. Кучу всего что требуется в реальной торговле, но не нужно при работе в тестере, я не пишу. Потому и дешевле.
А возможно у Вас счёт с исполнением по Market, ECN например, а советник написан для работы только на счетах с исполнением Instant. То же может быть причиной, так как тестер всегда допускает работу советником рассчитанных под Instant, даже если терминал подключен к счёту c Market Execution.
 

سيرجي كيروف

Местный знаток
Этот вопрос надо задать тому кто писал. Лично я, если попросит заказчик, могу написать тестерный вариант. Например заказчик хочет проверить торговую идею в тестере. Кучу всего что требуется в реальной торговле, но не нужно при работе в тестере, я не пишу. Потому и дешевле.
А возможно у Вас счёт с исполнением по Market, ECN например, а советник написан для работы только на счетах с исполнением Instant. То же может быть причиной, так как тестер всегда допускает работу советником рассчитанных под Instant, даже если терминал подключен к счёту c Market Execution.
Давайте разберемся с этим
Как обнаружить какой именно счет открыт
И для какого счета адаптирован советник?
 

Ugar

Гуру форума
Давайте разберемся с этим
Как обнаружить какой именно счет открыт
И для какого счета адаптирован советник?
На счёте с Instant Execution гарантируется точность, но не гарантируется исполнение. Если проскальзывание при открытии оказалось больше заданного - сделка не откроется.
При отправке ордера можно сразу задать уровни стоп лосс и тейк профит.
Instant.JPG


На счёте с Market Execution гарантируется исполнение, но не гарантируется точность. Заданное проскальзывание игнорируется, сделка откроется с любым проскальзыванием.
При отправке ордера нельзя задавать стоп лосс и тейк профит. Сделка должна быть открыта без них, иначе не откроется, будет ошибка.
Стоп лосс и тейк профит устанавливается позже, модификацией сделки.
Market.JPG


В тестере проскальзывания не бывает, по этому можно открывать сделки сразу со стоп лосс и тейк профит как на счетах с Instant Execution.
 
Последнее редактирование:

ErsLan

Прохожий
Здравствуйте. Помогите разобраться со скальпинг стратегией "ICHIMOKU STOCHASTIC SCALPING", которая выложена на сайте https://fortrader.org/binary-options/binary-strategy/torgovaya-strategiya-ichimoku-stochastic-scalping-dlya-binarnyx-opcionov-skalpinga-i-dejtrejdinga.html. Там написано открывать сделку, если цена выше или ниже красной или зеленой точки. Открывать сразу при появлении стрелки или дожидаться ее формирования?
 
Последнее редактирование модератором:

ИванМН

Местный знаток
Вопрос по тестеру стратегий MQL4

Советник, накинутый на 15-минутный график, в процессе работы считывает показания некоего индикатора, предположим, стохастика, со старшего, например, 4-часового таймфрейма. В реальном времени всё понятно: считываются значения, которые 4-часовой индюк выдаёт в моменте. Вопрос: а как в таких случаях "выходит из положения" тестер стратегий? Ведь эти промежуточные "межсвечевые" значения индюка нигде не сохраняются, сохраняются лишь те, которые получены на закрытии/открытии очередной 4-часовой свечи. Тестер как-то эмулирует эти значения, как эмулирует тики или какой механизм тут работает? Спасибо.
 

Ugar

Гуру форума
Советник, накинутый на 15-минутный график, в процессе работы считывает показания некоего индикатора, предположим, стохастика, со старшего, например, 4-часового таймфрейма. В реальном времени всё понятно: считываются значения, которые 4-часовой индюк выдаёт в моменте. Вопрос: а как в таких случаях "выходит из положения" тестер стратегий? Ведь эти промежуточные "межсвечевые" значения индюка нигде не сохраняются, сохраняются лишь те, которые получены на закрытии/открытии очередной 4-часовой свечи. Тестер как-то эмулирует эти значения, как эмулирует тики или какой механизм тут работает? Спасибо.
Тестер МТ4 моделирует тики только заданного таймфрейма и символа. Индикаторы на не заданном таймфрейме или символе будет строиться по барам из файла истории.
 

vasilekpos

Прохожий
Советник TFOT_v4.0_edu

Здравствуйте! Подскажите пожалуйста, для этого советника рекомендуется открывать 5 таймфреймов, М1 М5 м-15 м30 H1, и на 1 из них вешать собственно советника. Действительно ли это нужно, указывает на это что-либо в коде или достаточно открыть один, например м15. Спасибо!
 

Вложения

  • TFOT_v4.0_edu.rar
    34,9 КБ · Просмотры: 103

Anna89

Новичок форума
Здравствуйте. Подскажите, пожалуйста, функцию закрытия по следующему бару.
 

Ugar

Гуру форума
Здравствуйте. Подскажите, пожалуйста, функцию закрытия по следующему бару.
Простейший вариант

for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
//Если нужно здесь добавить фильтр ордеров по маджику и символу
//Сравнить время открытия ордера с временем открытия бара
if(OrderOpenTime()<Time[0])
{
//Закрытие ордера
OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),100);

}

}

}
 

fet2018

Прохожий
Помогите, пожалуйста, с кодом для советника. Для входа в сделку мне необходимо следующее: на Н1 сигнал на стрелке, как на рисунке, далее советник ждет сигнал на крестике на М15 и, если нет обратного сигнала на Н1 и М15, входит в сделку.
Если я правильно понял, алгоритм должен быть таким

1. Находим бар на часовом интервале у которого есть стрелка
2. Получаем время открытия этого бара
3. Зная время открытия часового бара вычисляем смещение первого 15 минутного бара этого часа
4. Начиная с этого смещения проверяем 15 минутные бары, уменьшая смещение до 0.
5. Если есть условие открытия сделки - даем соответствующий сигнал

Помогите, пожалуйста, с кодом.
 

Вложения

  • 2.jpg
    2.jpg
    33,8 КБ · Просмотры: 79

Т926СА

Прохожий
Помогите, что не так с кодом? Не закрывает по 2 ордера

Код:
//+------------------------------------------------------------------+
//|         Советник, выставляет 4 ордера по 4м валютам              |
//+------------------------------------------------------------------+
#property strict
//+------------------------------------------------------------------+
extern string  SYMBOL1        = "EURUSD"; //первый символ, если не указан, то не выставляется
extern string  SYMBOL2        = "GBPUSD"; //второй символ, если не указан, то не выставляется
extern string  SYMBOL3        = "EURGBP"; //третий символ, если не указан, то не выставляется
extern string  SYMBOL4        = "GBPJPY"; //четвертый символ, если не указан, то не выставляется
extern double  LOT1           = 0.1;      //лот первого инструмента
extern double  LOT2           = 0.1;      //лот второго инструмента
extern double  LOT3           = 0.1;      //лот третьего инструмента
extern double  LOT4           = 0.1;      //лот четвертого инструмента
extern int     TYPE1          = OP_BUY;   //тип ордера первого инструмента
extern int     TYPE2          = OP_SELL;  //тип ордера второго инструмента
extern int     TYPE3          = OP_BUY;   //тип ордера третьего инструмента
extern int     TYPE4          = OP_SELL;  //тип ордера четвертого инструмента
extern int     Slippage       = 30;       //проскальзывание 
extern double  obpr           = 10;       //Общий профит
extern int     Magic          = 777888;

//============================================================================
void start()
  {
   double pa1=0, pa2=0;
   int i;
   int p1=0,p2=0;
   for(i=OrdersTotal()-1; i>=0; i--)
     {//Проверяем профит
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderMagicNumber()==Magic)
       {//Подсчитываем общий профит
        if(p1<=2 && (OrderSymbol()==SYMBOL1 || OrderSymbol()==SYMBOL2)) {pa1=pa1+OrderProfit()+OrderSwap()+OrderCommission(); p1++;}
        if(p2<=2 && (OrderSymbol()==SYMBOL3 || OrderSymbol()==SYMBOL4)) {pa2=pa2+OrderProfit()+OrderSwap()+OrderCommission(); p2++;}
       }
     }
   if(pa1>=obpr) close_orders(1); //Закрываем две пары, если они в сумме >= общему профиту
   if(pa2>=obpr) close_orders(2);
   
   int s=0;
   for(i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderMagicNumber()==Magic) s++;
     }
   if(s>2) return;

   int    Digit=(int)MarketInfo(SYMBOL1,MODE_DIGITS);
   double Poin=MarketInfo(SYMBOL1,MODE_POINT);
   double ASK=NormalizeDouble(MarketInfo(SYMBOL1,MODE_ASK),Digit);
   double BID=NormalizeDouble(MarketInfo(SYMBOL1,MODE_BID),Digit);
   if(SYMBOL1!="")
     {
      if(TYPE1==OP_BUY)
        {
         if(OrderSend(SYMBOL1,OP_BUY,LOT1,ASK,Slippage,0,0,"1й_ордер",Magic,0,Blue)!=-1)
            Alert("Ордер BUY  лот ",LOT1," ",SYMBOL1);
         else Alert(SYMBOL1," send order BAY error ",GetLastError(),"  ",MarketInfo(SYMBOL1,MODE_ASK),"  ",LOT1);
        }
      if(TYPE1==OP_SELL)
        {
         if(OrderSend(SYMBOL1,OP_SELL,LOT1,BID,Slippage,0,0,"1й_ордер",Magic,0,Blue)!=-1)
            Alert("Ордер SELL  лот ",LOT1," ",SYMBOL1);
         else Alert(SYMBOL1," send order SELL error ",GetLastError(),"  ",MarketInfo(SYMBOL1,MODE_ASK),"  ",LOT1);
        }
     }
   if(SYMBOL2!="")
     {
      Digit=(int)MarketInfo(SYMBOL2,MODE_DIGITS);
      Poin=MarketInfo(SYMBOL2,MODE_POINT);
      ASK=NormalizeDouble(MarketInfo(SYMBOL2,MODE_ASK),Digit);
      BID=NormalizeDouble(MarketInfo(SYMBOL2,MODE_BID),Digit);
      if(TYPE2==OP_BUY)
        {
         if(OrderSend(SYMBOL2,OP_BUY,LOT2,ASK,Slippage,0,0,"2й_ордер",Magic,0,Blue)!=-1)
            Alert("Ордер BUY  лот ",LOT2," ",SYMBOL2);
         else Alert(SYMBOL2," send order BAY error ",GetLastError(),"  ",MarketInfo(SYMBOL2,MODE_ASK),"  ",LOT2);
        }
      if(TYPE2==OP_SELL)
        {
         if(OrderSend(SYMBOL2,OP_SELL,LOT2,BID,Slippage,0,0,"2й_ордер",Magic,0,Blue)!=-1)
            Alert("Ордер SELL  лот ",LOT2," ",SYMBOL2);
         else Alert(SYMBOL2," send order SELL error ",GetLastError(),"  ",MarketInfo(SYMBOL2,MODE_ASK),"  ",LOT2);
        }
     }
   if(SYMBOL3!="")
     {
      Digit=(int)MarketInfo(SYMBOL3,MODE_DIGITS);
      Poin=MarketInfo(SYMBOL3,MODE_POINT);
      ASK=NormalizeDouble(MarketInfo(SYMBOL3,MODE_ASK),Digit);
      BID=NormalizeDouble(MarketInfo(SYMBOL3,MODE_BID),Digit);
      if(TYPE3==OP_BUY)
        {
         if(OrderSend(SYMBOL3,OP_BUY,LOT3,ASK,Slippage,0,0,"3й_ордер",Magic,0,Blue)!=-1)
            Alert("Ордер BUY  лот ",LOT3," ",SYMBOL3);
         else Alert(SYMBOL3," send order BAY error ",GetLastError(),"  ",MarketInfo(SYMBOL3,MODE_ASK),"  ",LOT3);
        }
      if(TYPE3==OP_SELL)
        {
         if(OrderSend(SYMBOL3,OP_SELL,LOT3,BID,Slippage,0,0,"3й_ордер",Magic,0,Blue)!=-1)
            Alert("Ордер SELL  лот ",LOT3," ",SYMBOL3);
         else Alert(SYMBOL3," send order SELL error ",GetLastError(),"  ",MarketInfo(SYMBOL3,MODE_ASK),"  ",LOT3);
        }
     }
   if(SYMBOL4!="")
     {
      Digit=(int)MarketInfo(SYMBOL4,MODE_DIGITS);
      Poin=MarketInfo(SYMBOL4,MODE_POINT);
      ASK=NormalizeDouble(MarketInfo(SYMBOL4,MODE_ASK),Digit);
      BID=NormalizeDouble(MarketInfo(SYMBOL4,MODE_BID),Digit);
      if(TYPE4==OP_BUY)
        {
         if(OrderSend(SYMBOL4,OP_BUY,LOT4,ASK,Slippage,0,0,"4й_ордер",Magic,0,Blue)!=-1)
            Alert("Ордер BUY  лот ",LOT4," ",SYMBOL4);
         else Alert(SYMBOL4," send order BAY error ",GetLastError(),"  ",MarketInfo(SYMBOL4,MODE_ASK),"  ",LOT4);
        }
      if(TYPE4==OP_SELL)
        {
         if(OrderSend(SYMBOL4,OP_SELL,LOT4,BID,Slippage,0,0,"4й_ордер",Magic,0,Blue)!=-1)
            Alert("Ордер SELL  лот ",LOT4," ",SYMBOL4);
         else Alert(SYMBOL4," send order SELL error ",GetLastError(),"  ",MarketInfo(SYMBOL4,MODE_ASK),"  ",LOT4);
        }
     }
   return;
  } 

//=====================================================================
void close_orders(int para)
{
bool err;
int p1=0, p2=0; //удаляем только два последних ордера
for(int i=OrdersTotal()-1; i>=0; i--)
  {
   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderMagicNumber()==Magic)
    {
     if(p1<=2 && para==1 && (OrderSymbol()==SYMBOL1 || OrderSymbol()==SYMBOL2)) 
      {
       if(OrderType()==OP_BUY)  err=OrderClose(OrderTicket(),OrderLots(), Bid, 30,clrNONE);
       if(OrderType()==OP_SELL) err=OrderClose(OrderTicket(),OrderLots(), Ask, 30,clrNONE);
       p1++;
      }
     if(p2<=2 && para==2 && (OrderSymbol()==SYMBOL3 || OrderSymbol()==SYMBOL4))
      {
       if(OrderType()==OP_BUY)  err=OrderClose(OrderTicket(),OrderLots(), Bid, 30,clrNONE);
       if(OrderType()==OP_SELL) err=OrderClose(OrderTicket(),OrderLots(), Ask, 30,clrNONE);
       p2++;
      }
    }
  }
return;
}
 
Последнее редактирование модератором:

R-TRY

Интересующийся
Открыть по стрелке

Добрый день, подскажите как заставить советника открыть ордер при появлении стрелки. Буферы пустые. Понимаю что надо перебрать все объекты типа стрелка на графике и при появлении новой открыть ордер.
 

Ugar

Гуру форума
Добрый день, подскажите как заставить советника открыть ордер при появлении стрелки. Буферы пустые. Понимаю что надо перебрать все объекты типа стрелка на графике и при появлении новой открыть ордер.
Для начала надо выяснить что есть стрелка. Если это буфер, его можно обнаружить в свойствах индикатора, вкладка цвета. Если стрелка это графический объект, то надо посмотреть его свойства. В частности имя. Посмотрев имена нескольких стрелок можно понять из чего оно состоит. Соответственно, можно понять с каким именем может появиться новая стрелка. Значит в советнике искать объект с этим именем и при его появлении открывать сделку.
 

Ugar

Гуру форума
Код:
//=====================================================================
void close_orders(int para)
{
bool err;
int p1=0, p2=0; //удаляем только два последних ордера
for(int i=OrdersTotal()-1; i>=0; i--)
  {
   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderMagicNumber()==Magic)
    {
     if(p1<=2 && para==1 && (OrderSymbol()==SYMBOL1 || OrderSymbol()==SYMBOL2)) 
      {
       if(OrderType()==OP_BUY)  err=OrderClose(OrderTicket(),OrderLots(), Bid, 30,clrNONE);
       if(OrderType()==OP_SELL) err=OrderClose(OrderTicket(),OrderLots(), Ask, 30,clrNONE);
       p1++;
      }
     if(p2<=2 && para==2 && (OrderSymbol()==SYMBOL3 || OrderSymbol()==SYMBOL4))
      {
       if(OrderType()==OP_BUY)  err=OrderClose(OrderTicket(),OrderLots(), Bid, 30,clrNONE);
       if(OrderType()==OP_SELL) err=OrderClose(OrderTicket(),OrderLots(), Ask, 30,clrNONE);
       p2++;
      }
    }
  }
return;
}
err=OrderClose(OrderTicket(),OrderLots(), Bid, 30,clrNONE);
err=OrderClose(OrderTicket(),OrderLots(), Ask, 30,clrNONE);
Bid, Ask это цена по текущему символу, а не по символу ордера.
 

Leonup

Новичок форума
Круглые уровни

С Новым Годом, уважаемые программисты!
Помогите, пожалуйста, реализовать такую задачу.

Стоп-лосс фиксируется на ближайшем круглом уровне с окончанием «50» или «00» (4 знака). Если до ближайшего подобного уровня меньше 15 пунктов, то за целевой ориентир взять следующий за ним подобный уровень.

Заранее благодарен!
 

Ugar

Гуру форума
С Новым Годом, уважаемые программисты!
Помогите, пожалуйста, реализовать такую задачу.

Стоп-лосс фиксируется на ближайшем круглом уровне с окончанием «50» или «00» (4 знака). Если до ближайшего подобного уровня меньше 15 пунктов, то за целевой ориентир взять следующий за ним подобный уровень.

Заранее благодарен!
В чём загвоздка? Не заешь как стоп лосс фиксируется? Я то же. Я знаю как установить и перенести, а как и кем фиксируется-не знаю.
Или проблема посчитать круглый уровень?
 

Leonup

Новичок форума
В чём загвоздка? Не заешь как стоп лосс фиксируется? Я то же. Я знаю как установить и перенести, а как и кем фиксируется-не знаю.
Или проблема посчитать круглый уровень?

Проблема - посчитать правильно круглый уровень и выбрать нужный для УСТАНОВКИ стоп-лосса.
 

Ugar

Гуру форума
Допустим для Buy.

Берём цену, для Buy - Bid. Делим на шаг 50 пунктов. Округляем до целого, для Buy - в меньшую сторону. Результат умножаем на шаг.
double Step=50*_Point;
double Level=MathFloor(Bid/Step)*Step;
Дальше проверить не слишком ли близко он к цене, если слишком близко, отодвинуть на шаг, для Buy - вниз.
if(Bud-Level<15*_Point)Level-=Step;
Как то так.
Для Sell зеркально.
 
Последнее редактирование:
Верх