[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 917

 
_SS_:
Как создать функцию и вызвать ее?
Почитать учебник... :)
 

artemida70, собрал свой первый советник по учебнику С.Ковалева. Оказалось, что в нем функция критериев работает с убытками. Написал свою функцию критериев. Проверил на наличие ошибок, затем выполнил компиляцию советника. В результате работы получил:

   - по функции критериев: О - ошибок, 1- предупреждение;

   -по компиляции советника: О - ошибок, О - предупреждений.

Но работа в Тестере стратегий не пошла, поставил проверочные АЛЕРТЫ в функциях int init, int start, int deinit. По откликам вижу, что управление из Терминала передается в функцию int init, а в функцию int start управление не передается - отклика АЛЕРТА нет. При выгрузке Советника идет отклик от функции int deinit.

Пожалуйста, Ваш совет по такой ситуации. Очень нужен совет опытного прфессионала.

                                                                                                                                  СПАСИБО  

 

artmedia70:
Почитать учебник... :)
 
artmedia70:
Тут у вас странная какая-то конструкция. Вы делаете стандартный цикл перебора ордеров терминала. От нуля до OrdersTotal() -1. А потом уже в цикле проверяете полное отсутствие ордеров в терминале. Почему бы тикет ордера не проверять? Или магик? Да и флаг ваш почему-то =0. А почему не false? Хотя, хозяин - барин... Ваша логика - вам её и разбирать... :)

Благодарю за подсказку))) Именно в этом месте:... От нуля до OrdersTotal() -1... и была прчина, по которой тестер не продолжал выставление ордеров дальше)))

А по такой схеме делаю потому, что так научился на чужих уроках. Если опишите подробнее более рациональный способ - буду очень благодарен)))

 

короче я доканался,месяц наверно не вылезаю из этого mql4,у меня уже походу крыша едет что ли?

короче тест проходит идеально,на демо и реале не рааабооотает!!!!пробовал лот 1 тоже никак,в журнале даже никаких ошибок не выдает.

вообщем выкладываю,дайте хотя бы подсказочку что не так? гуру помогите чайнику!!!

народ,у меня почему то советник не выкладывается? или это я не вижу?
 
extern double StopLoss=50.0;
extern double TakeProfit=50.0;
extern double Lots=1;
extern int total;

int start()
{
double Price_1, Price_2, min, max;
RefreshRates();
Price_1=Bid;
Price_2=Ask;

min=iLow(NULL,0,2);
max=iHigh(NULL,0,2);
total=OrdersTotal();
if(total<1)
{

if(Price_1>max)
OrderSend(Symbol(),OP_BUY,Lots,Ask,5,Bid-StopLoss*Point,Ask+TakeProfit*Point,"My order#",16384,0,Green);

if(Price_2<min)
OrderSend(Symbol(),OP_SELL,Lots,Bid,5,Ask+StopLoss*Point,Bid-TakeProfit*Point,"My order#",16384,0,Green);
}
}
return(0);
 
boris.45:

artemida70, собрал свой первый советник по учебнику С.Ковалева. Оказалось, что в нем функция критериев работает с убытками. Написал свою функцию критериев. Проверил на наличие ошибок, затем выполнил компиляцию советника. В результате работы получил:

- по функции критериев: О - ошибок, 1- предупреждение;

-по компиляции советника: О - ошибок, О - предупреждений.

Но работа в Тестере стратегий не пошла, поставил проверочные АЛЕРТЫ в функциях int init, int start, int deinit. По откликам вижу, что управление из Терминала передается в функцию int init, а в функцию int start управление не передается - отклика АЛЕРТА нет. При выгрузке Советника идет отклик от функции int deinit.

Пожалуйста, Ваш совет по такой ситуации. Очень нужен совет опытного прфессионала.

СПАСИБО


Ещё бы глянуть чего вы там наваяли... :)
Мне не понятно что значит - у СК функция критериев работает с убытками. Ведь любая функция, если она отслеживает критерии открытия, может либо верно работать, либо неверно, а значит - с ошибками. А вот сама стратегия - она может быть убыточной или прибыльной... Функция критериев только отслеживает те критерии, которые заданы стратегией и посылает сигналы в торговую функцию.
 
ViktorF:

Благодарю за подсказку))) Именно в этом месте:... От нуля до OrdersTotal() -1... и была прчина, по которой тестер не продолжал выставление ордеров дальше)))

А по такой схеме делаю потому, что так научился на чужих уроках. Если опишите подробнее более рациональный способ - буду очень благодарен)))

Способов-то много. Всё зависит от того, что вы хотите найти.

В любом случае можете начать перебор ордеров в цикле

for (int i =0; i<OrdersTotal(); i++)

далее в цикле уже проверяете именно то, что хотите найти.

if (OrderSelect(i, SELECT_BY_POS) // Если ордер выбран (здесь я опустил параметр функции MODE_TRADES, т.к. он выбирается по-умолчанию)

а далее - уже проверяете необходимые вам параметры ордера, например магик

if (OrderMagicNumber()==Magic) // если ордер имеет заданный магик, то... значит это нужный ордер...

Ну... или его тип...

if (OrderType()==OP_BUY || OrderType()==OP_SELL) // если тип ордера Бай или Селл...

и т.д.

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

 
gheka:

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

Всем здрасте! В советнике имеется такой код (см. ниже). Как я понял сигнал на открытие позиции берется из показателей двух индюков. Как сделать так, чтобы ордера открывались на основании только одного индикатора, например CCI? Большое спасибо.

int getSignal() {
   int Momentum = checkMomentum();
   int CCI = checkCCI();
   if (Momentum != CCI) return (0);
   return (Momentum);
}
int checkCCI() {
   double CCI = iCCI(NULL, 0, 60, PRICE_TYPICAL, 1);
   Print("CCI: ", CCI);
   if (CCI > 0.0) return (1);
   if (CCI < 0.0) return (-1);
   return (0);
}

int checkMomentum() {
   double Momentum = iMomentum(NULL, 0, 60, PRICE_TYPICAL, 1);
   Print("Momentum ", Momentum);
   if (Momentum > 100 && Momentum < 101) return (1);
   if (Momentum < 100 && Momentum > 99) return (-1);
   return (0);
}
 

помогите, советник не закрывает все ордера при достижении профита

void CloseAllOrders()
{
  for (int i = 0; i < OrdersTotal(); i++)
  {
    if (OrderSelect(i, SELECT_BY_POS))
    {
      if (OrdersTotal() > 1 && OrderSymbol() == Symbol() && AccountProfit() >= AccountBalance()*AllProfit/100)
      {
        if((OrderType()==OP_BUY || OrderType()==OP_BUYSTOP || OrderType()==OP_BUYLIMIT)) OrderClose(OrderTicket(), OrderLots(),Bid,0);
        if((OrderType()==OP_SELL || OrderType()==OP_SELLSTOP || OrderType()==OP_SELLLIMIT)) OrderClose(OrderTicket(), OrderLots(),Ask,0);
        if(UseSound == true)
        {
        PlaySound(SuccesSound);
        }        
      }
    }
  }
}
Причина обращения: