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

 
xruss >>:

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

https://book.mql4.com/ru/variables/arrays

В конце этого раздела очень хорошо описан принцип использования флагов на примере факта образования нового бара. По аналогии, заводим две переменные типа bool, которые будут указывать на допустимость открытия сделок определённого типа, например Buy_Allowed и Sell_Allowed. По умолчанию этим переменным присваиваем значения true. Если поступает сигнал Buy, то при успешном открытии позиции устанавливаем Buy_Allowed=false, при этом перед OrderSend() добавляем условие его исполнения для сделок Buy только при Buy_Allowed==true. Когда поступит обратный сигнал - сбрасываем флаг Buy_Allowed=true. Та же самая схема и для сделок Sell, но уже с флагом Sell_Allowed.

 
Everlost >>:

https://book.mql4.com/ru/variables/arrays

В конце этого раздела очень хорошо описан принцип использования флагов на примере факта образования нового бара. По аналогии, заводим две переменные типа bool, которые будут указывать на допустимость открытия сделок определённого типа, например Buy_Allowed и Sell_Allowed. По умолчанию этим переменным присваиваем значения true. Если поступает сигнал Buy, то при успешном открытии позиции устанавливаем Buy_Allowed=false, при этом перед OrderSend() добавляем условие его исполнения для сделок Buy только при Buy_Allowed==true. Когда поступит обратный сигнал - сбрасываем флаг Buy_Allowed=true. Та же самая схема и для сделок Sell, но уже с флагом Sell_Allowed.

Спасибо буду просвещаться. В прошлом сообщении выложил часть кода.

 

    Зашел сюда по названию темы.Да,нехилые вопросы у новичков.А куда же нам,тем кто ниже чайников?Подскажите кто знает такие места.Или сильно небейте за глупые вопросы.Например такой:скачал с этого сайта вот такой советник Daydream01_www.forex-instruments.info,протестировал.Качество торговли обсуждать небуду,вопрос такой.При тестировании максимальный лот с которым прошел тест составил 0,1 и это при том,что баланс 10000.Тестировал на GBPUSD 15 в Meta Trader 4 222.Что интересно,на другом компе тест с 1 лотом прошел нормально.В чем прикол?

   Второй вопрос: что такое "ошибки рассогласования" в отчете теста?

  Вопрос третий:почему советник может недавать сигналы?У меня такое впечатление,что это как то связано с первым вопросом,т.е. что то глючит в програме.Ставил на EURUSD M1  MACD Sample(который идет стандартно),занизил уровень открытия MACD OpenLevel до 1 - и ничего,ниодного сигнала.

   Кому не трудно,растолкуйте малограмотному.

 
xruss >>:

Спасибо буду просвещаться. В прошлом сообщении выложил часть кода.

int    ORDtype=-1, ORDtime=0;
double ORDprofit;

for (int i=OrdersHistoryTotal()-1; i>=0; i--) {
  if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
    if (OrderSymbol()==Symbol()) {
      if (OrderCloseTime()!=0 && OrderCloseTime()>ORDtime) {
        ORDtime=OrderCloseTime();
        ORDtype=OrderType();
        ORDprofit=OrderProfit();
      }
    }
  }
}

//........

if (ORDtype==-1)
{
  // В истории не нашлось подходящих ордеров
}

if (ORDtype==OP_SELL)
{
  // Последним был закрыт Sell
}

if (ORDtype==OP_BUY)
{
  // Последним был закрыт Buy
}
Рабочий вариант вашего кода. Вы зря убрали проверку (OrderCloseTime()>time), поскольку без неё теряется весь смысл - мы выбираем именно самый последний закрытый ордер, сравнивая время закрытия каждого перебираемого ордера со старшим временем закрытия из ранее найденных ордеров, которое мы и сохраняем в переменной ORDtime. У вас же идёт просто перебор всех ордеров истории. Ещё у вас было условие по ORDprofit, но это уже сами добавите. :)
 
Everlost >>:
Рабочий вариант вашего кода. Вы зря убрали проверку (OrderCloseTime()>time), поскольку без неё теряется весь смысл - мы выбираем именно самый последний закрытый ордер, сравнивая время закрытия каждого перебираемого ордера со старшим временем закрытия из ранее найденных ордеров. Ещё у вас было условие по ORDprofit, но это уже сами добавите. :)

да у меня было условие запрещать открывать в ту же сторону если на последнем ордере был профит :)

огроменное спасибо!!!))

 
zas писал(а) >>

Второй вопрос: что такое "ошибки рассогласования" в отчете теста?

Очень много раз спрашивали, Вам будет проще воспользоваться поиском...

zas писал(а) >>

При тестировании максимальный лот с которым прошел тест составил 0,1 и это при том,что баланс 10000.Тестировал на GBPUSD 15 в Meta Trader 4 222.Что интересно,на другом компе тест с 1 лотом прошел нормально.В чем прикол?

Может на другом компе МТ4 присоединен к счету другого брокера?, разные брокеры, разные торговые условуия... А может в советнике лот рандомно определяется?) Цепляйте код советника, стейты, будет точный ответ.

zas писал(а) >>

Вопрос третий:почему советник может недавать сигналы?У меня такое впечатление,что это как то связано с первым вопросом,т.е. что то глючит в програме.Ставил на EURUSD M1 MACD Sample(который идет стандартно),занизил уровень открытия MACD OpenLevel до 1 - и ничего,ниодного сигнала.

Посмотрите в журнал тестера, если речь идет о тестере. Выложите сет параметров, и результат теста советника (где нет сигнаналов). Похоже все Ваши нескладушки от недостаточного опыта, а не глюков в программе...

 
VladislavVG >>:

Один из вариантов :

Переменную bool NeedAlert устанавливать в true при начале торговли.


Благодарю, блин а я думал что так не получится -типа цикл работать не будет-оказывается фигурную скобку забыл))

 
А вот такой вопрос: Как расчитать размер лота, чтобы предполагаемая прибыль за 20 пунктов составила бы 4% от текущего депозита ?
 
xruss писал(а) >>

Спасибо буду просвещаться. В прошлом сообщении выложил часть кода.

//+------------------------------------------------------------------+
// Проверка последнего ордера по условию                             |
//+------------------------------------------------------------------+
bool LastCloseOrd(string Sy = "",//Если Sy=="" на принадлежность символу не проверяем
                  int  Type = -1,//Если Typ==-1 любой тип ордера
                  int Magic = -1,//Если Magic=-1любой магик
                  int Pr_Ls =  0){//Если Pr_Ls =0 без проверки на профит, если <0 то фильтр лосевых , если >0 то фильтр профитных ордеров
                  int time=0;
if(OrdersHistoryTotal()<1){return(false);}//Если нет закрытых ордеров выходим 
  for(int i=0;i<OrdersHistoryTotal();i++){//Перебираем закрытые ордера
    if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)){//Выбираем ордер из истории
      if(OrderCloseTime()!=0){//Если ордер уже закрыт
        if(Sy==""||OrderSymbol()==Sy){//если совпадает символ, или нет проверки на символ
          if(Type==-1||OrderType()==Type){//если совпадает тип, или нет проверки на тип
            if(Magic==-1||OrderMagicNumber()==Magic){//если совпадает магик , или не проверки на магик
              if(OrderCloseTime()>time){//если время закрытия ордера больше чем предыдущее
                time=OrderCloseTime();//записываем время закрытия (в конце цикла у нас в ловушке булет сидеть последний закрытый ордер
              }                                                  //попадающий под все условия выставленных фильтров)
            }
          }
        }
      }
    }
  }  
if(Pr_Ls==0&&time!=0){return(true);}//если нет условия на профит-лосс подтверждаем наличие ордера
if(Pr_Ls<0&&OrderProfit()<0){return(true);}//если ордер лосевый подтверждаем наличие ордера
if(Pr_Ls>0&&OrderProfit()>0){return(true);}//если ордер профитный подтверждаем наличие ордера
return(false);//нет ни одного попадающего под выставленные условия ордера
} 
 

Это про ошибки в тестере.........

Если кто нибудь знает, то подскажите.....

')' - wrong parameters count	C:\Program Files\MetaTrader - Alpari\experts\expertCCI_WILLIAMS.mq4 (64, 37)
')' - wrong parameters count	C:\Program Files\MetaTrader - Alpari\experts\expertCCI_WILLIAMS.mq4 (65, 37)
Что означают цифры 64,37 и 65,37????????????
Причина обращения: