[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 283

 
Shniperson:

Здравствуйте! не подскажете ли как можно "зациклить" проверку баров на рост/падение? То есть как можно "покороче" описать данное условие

Close[0]>Open[0]&& Close[1]>Open[1]&& Close[2]>Open[2]&& Close[3]>Open[3]&& Close[4]>Open[4]&& Close[5]>Open[5]&& Close[6]>Open[6]&& Close[7]>Open[7]

bool Res=true;
for(int i=0;i<8;i++) Res = Res && Close[i]>Open[i];

за ранее благодарен.


Можно так, но вряд ли будет быстрее. Условия надо малость расширить
 

Не знаю как превратить это в жизнь, можно ли так сделать?

Стратегия моя в идеале ручками открывается в 8-00 по терминалу, если профит, то до след дня. Если пошла не в мою сторону, то при лосе переворачиваем позицию все + - без разницы больше в этот день не открываем позиции ждем 8 утра. Т.е. максимум должно быть два ордера не более. Все позиции тралим, если до профита не дошло, но трал переместился в безубыток, то тоже переворачиваемся. Можно конечно ручками все делать, но работа не позволяет следить за позицями. Так-что желательно поставил ордер и дальше позицию сопровождал бы советник. RSI просто так прикрутил чтоб на тестере тестить.

Меня хватило только на это

extern int Hour_To_Open = 08; //час открытия (-1 - не задано), терминальное время
extern int Minute_To_Open = 00; //минута открытия (-1 - не задано), терминальное время
extern double TakeProfit = 50;
extern double StopLoss = 30;
extern double Lot = 0.1;
extern int MagicNumber = 655433;


//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
if((Hour()==Hour_To_Open) && (Minute()==Minute_To_Open)) 
{ //если настало время открытия сделок
int total = OrdersTotal();
for (int i = 0; i < total; i++) 
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
return(0);
}
} 
int ticket=1;
if(iRSI(NULL,0,14,PRICE_CLOSE,0)>iRSI(NULL,0,14,PR ICE_CLOSE,1))
{
ticket=OrderSend(Symbol(),OP_BUY,Lot,Ask,3,Bid - StopLoss * Point,Bid + TakeProfit * Point,"My order #",MagicNumber,0,Blue);
if(ticket<0)
{
Sleep(30000);
}
}
else
{
ticket=OrderSend(Symbol(),OP_SELL,Lot,Bid,3,Ask + StopLoss * Point,Ask - TakeProfit * Point,"My order #",MagicNumber,0,Red);
if(ticket<0)
{
Sleep(30000);
}
}
} //end if((Hour()==Hour_To_Open) && (Minute()==Minute_To_Open))
//----
return(0);
}
//+------------------------------------------------------------------+

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

extern bool UseTrailing = true; //включение/выключение T-SL
extern int TrailingStop = 50; // Фиксированный размер трала
extern int TrailingStep = 1; // Шаг трала

//+-------------------------------------------------------------------------------------------------------------------+
//| трейлинг стоп лосс |
void T_SL() {
int i=0;
for(i=0; i<OrdersTotal(); i++) {
if(!(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))) continue;
if(OrderSymbol() != Symbol()) continue; 

if(OrderType()==OP_BUY) {
if(NormalizeDouble(Bid-OrderOpenPrice(),Digits)>NormalizeDouble(TrailingS top*Point,Digits)) {
if(NormalizeDouble(OrderStopLoss(),Digits)<Normali zeDouble(Bid-(TrailingStop+TrailingStep-1)*Point,Digits))
OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Bid-TrailingStop*Point,Digits), OrderTakeProfit(), 0, CLR_NONE);
} //end if(NormalizeDouble(Bid-OrderOpenPrice(),Digits)>NormalizeDouble(TrailingS top*Point,Digits))
} //end if(OrderType()==OP_BUY)

if(OrderType()==OP_SELL) {
if(NormalizeDouble(OrderOpenPrice()-Ask,Digits)>NormalizeDouble(TrailingStop*Point,Dig its)) {
if(NormalizeDouble(OrderStopLoss(),Digits)>Normali zeDouble(Ask+(TrailingStop+TrailingStep-1)*Point,Digits))
OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Ask+TrailingStop*Point,Digits), OrderTakeProfit(), 0, CLR_NONE);
} //end if(NormalizeDouble(OrderOpenPrice()-Ask,Digits)>NormalizeDouble(TrailingStop*Point,Dig its))
} //end if(OrderType()==OP_SELL)
} //end for(i=0; i<OrdersTotal(); i++)
} //end void T_SL()
//| трейлинг стоп лосс |
//+-------------------------------------------------------------------------------------------------------------------+

 Как бы его прикрутить? И реверс чтоб только один раз срабатывал после открытия позиции

 

Реверс наверно надо где-то здесь искать я так понял или нет?

 

bool OrderCloseBy(int ticket, int opposite, color Color=CLR_NONE)
Закрытие одной открытой позиции другой позицией, открытой по тому же самому инструменту, но в противоположном направлении. Возвращает TRUE при успешном завершении функции. Возвращает FALSE при неудачном завершении функции. Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError().
Параметры:
ticket  -  Уникальный порядковый номер закрываемого ордера.
opposite  -  Уникальный порядковый номер противоположного ордера.
Color  -  Цвет стрелки закрытия на графике. Если параметр отсутствует или его значение равно CLR_NONE, то стрелка на графике не отображается.
Пример:
  if(iRSI(NULL,0,14,PRICE_CLOSE,0)>75)
    {
     OrderCloseBy(order_id,opposite_id);
     return(0);
    }
 

 
Ув.профи, подскажите, можно ли запускать скрипт из панели инструментов? Сейчас написанный скрипт приходится либо запускать из навигатора, либо с помощью заданной комбинции клавиш (которая почему-то срабатывает через раз). Вопрос - можно ли например присвоить значку из панели "графические инструменты" новую функцию и запускать скрипт из панели инструментов? Может какие другие варианты есть?
 

Добрый день.

Не подскажите, где можно посмотреть оригинальный код функции OrderSend()?

заранее благодарен.

 
kon12:
Ув.профи, подскажите, можно ли запускать скрипт из панели инструментов? Сейчас написанный скрипт приходится либо запускать из навигатора, либо с помощью заданной комбинции клавиш (которая почему-то срабатывает через раз). Вопрос - можно ли например присвоить значку из панели "графические инструменты" новую функцию и запускать скрипт из панели инструментов? Может какие другие варианты есть?

Нет, но можно с помощью на примере перетаскивания объекта Label ...

Качаем, извлекаем в терминал с заменой, разрешаем импорт длл в настр. терминала, приложенный Эксперт к Экспертам, вписываем название запускаемого скрипта перезагруз. терминал или компиляция.

Эксперт реализует - загружает на указанный график скрипт по его имени при перетаскивании объекта на графике.

      ServiceLoadScript(WindowHandle(Symbol(), Period()), "ZZ_All_Quotings 4.10425", /*<---- Имя загружаемого скрипта.*/  false);
Файлы:
trade_1.mq4  2 kb
 

Добрый день!!

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

 
Parn25:

Добрый день!!

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


Как вариант, возможно подойдет - сам подобный вариант логики работы сова пока не делал - если советник допускает только один рыночный ордер (из ранее выставленных 2-х отложенных), то мониторите (отслеживаете) наличие Вашего (по магику) ордера (рыночного) в рынке, далее, как только он появился - производите удаление отложенного. Все. По удалению отложенного - поиском через гугл гляньте, что - то типа - поисковая строка: "удаление ордеров site:mql4.com".
 

Здравствуйте!

Запускаю советника на тестере. Сервер четырехзначный. При выставлении ордера на покупку или продажу в журнале пишет

2011.10.23 15:27:26 2010.12.16 06:16 test_sovetnik GBPUSD,H1: open #1 buy 0.10 GBPUSD at 1.5551 sl: 1.4551 tp: 1.5586 ok

Но открывает по цене 1.55512 !!! По пятизнаку. Далее отложки ставятся по четырехзнаку и срабатывают тоже по четырехзнаку. Но OP_SELL и OP_BUY - открываются только по пятизнаку!

Делаю NormalizeDouble(Ask,Digits);

Ничегошеньки не помогает! Подскажите, как решить данный вопрос?

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

 
ZZZEROXXX:
Подскажите как нужно исправить советник, например стандартный Moving Averages, чтобы превратить его в скрипт, с целью прогнать на нестандартном таймфрейме.


UP. был бы признателен за принцип переделки советника в скрипт в двух словах

Причина обращения: