Ответ
 
Опции темы
Старый 26.04.2013, 15:20   #1241 (permalink)
Интересующийся
 
Аватар для profit777
 
Регистрация: 22.04.2013
Сообщений: 30
Репутация: 1
profit777
Сказал(а) спасибо: 22
Поблагодарили 0 раз(а) в 0 сообщениях
Поинты: 12
может не по теме...я новичок...просто тут настоящие мозголомы!
скажите...как тестировать сову которая работает по индюку? ведь в тестер индюка не воткнуть, или я ошибаюсь?
profit777 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 26.04.2013, 18:02   #1242 (permalink)
Программист mql4 mql5
 
Аватар для AlexeyVik
 
Регистрация: 19.11.2009
Сообщений: 2,529
Репутация: 3649
AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik
Сказал(а) спасибо: 1,118
Поблагодарили 3,653 раз(а) в 1,472 сообщениях
Поинты: 2007
Сообщение от profit777 Посмотреть сообщение
может не по теме...я новичок...просто тут настоящие мозголомы!
скажите...как тестировать сову которая работает по индюку? ведь в тестер индюка не воткнуть, или я ошибаюсь?
Ты ошибаешься. Советник обращается к индикатору непосредственно командой кода. А если тестировать с визуализацией, то можно наложить индикатор на график для наглядности.
AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 26.04.2013, 18:15   #1243 (permalink)
Активный участник
 
Аватар для evgen_82
 
Регистрация: 02.01.2013
Сообщений: 35
Репутация: 36
evgen_82
Сказал(а) спасибо: 63
Поблагодарили 35 раз(а) в 19 сообщениях
Поинты: 72
Уважаемые мастера прогеры!
Нашел на одном форуме функцию разрешения торговли по времени.
Однако сыплюстя ошибки. Подскажите в чем дело.
Также интересует, можно из нее сделать перевертышь, то бишь, при указании в extern string OpenTime советник наоборот не будет открывать позиций в указанное время?
Код HTML:
 extern string OpenTime = "10:00-10:05; 12:20-12:31; 13:40-13:55";

  string OTA[];
  string OTI[];
  split(OTA, OpenTime, ";");
  
  datetime tm0 = CurTime();
  datetime tm1, tm2;
  
  bool cond = false;
  
  int cnt = ArraySize(OTA);
  for (int i=0; i < cnt; i++) {
	split(OTI, OTA[i], "-");
	if (ArraySize(OTI) != 2) continue;
	
	tm1 = StrToTime(TimeToStr(CurTime(), TIME_DATE) + " " + OTI[0]);
	tm2 = StrToTime(TimeToStr(CurTime(), TIME_DATE) + " " + OTI[1]);
	
//	Print (OTI[0], " *** " ,OTI[1]);
	
	cond = cond || (tm1 <= tm0 && tm0 < tm2);
  }
  
		
  if (cond)
  {
	//Открываем позицию либо выполняем иные действия.
  }

void split(string& arr[], string str, string sym) 
{
  ArrayResize(arr, 0);

  string item;
  int pos, size;
  
  int len = StringLen(str);
  for (int i=0; i < len;) {
        pos = StringFind(str, sym, i);
        if (pos == -1) pos = len;
        
        item = StringSubstr(str, i, pos-i);
        item = StringTrimLeft(item);
        item = StringTrimRight(item);
        
        size = ArraySize(arr);
        ArrayResize(arr, size+1);
        arr[size] = item;
        
        i = pos+1;
  }
}

Последний раз редактировалось evgen_82; 26.04.2013 в 18:20.
evgen_82 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 27.04.2013, 21:47   #1244 (permalink)
hoz
Активный участник
 
Аватар для hoz
 
Регистрация: 01.04.2011
Сообщений: 530
Репутация: 111
hoz hoz
Сказал(а) спасибо: 59
Поблагодарили 112 раз(а) в 88 сообщениях
Поинты: 538
Отправить сообщение для hoz с помощью ICQ
Вот моя функция открытия отложенного ордера на покупку советника, который щяс пишу.

Скрытый текст

PHP код:
//+-------------------------------------------------------------------------------------+
//| Открытие длинной позиции                                                            |
//+-------------------------------------------------------------------------------------+
bool OpenBuy()
{
   
int ticket = -1;
   
double OOP High[1] + i_thresholdToUp pt;
   
pr ("ND(OOP) = " ND(OOP) + " ; Ask = " Ask);
   
pr ("g_stopLevel = " g_stopLevel);

   if (
ND(OOP)> (Ask g_stopLevel))
       
ticket OrderSend(Symbol(), OP_BUYSTOP0.1ND(OOP), pt00NULLi_magic0CLR_NONE);
   else 
pr ("Ордер послать не удалось " GetLastError());
   
   if (
ticket 0)
   {
 
//      lastBarTime = Time[0];               // На текущем баре все необходимые действия..
                                            // .. успешно выполнены
       
return (true);
   }

[свернуть]



Написано согласно требованиям установки отложенного ордера _http://book.mql4.com/ru/appendix/limits Даже, более того, вставил зазор (Stoplevel), хотя в требованиях для открытия этого нет. Тем не менее, всё-равно выскакивают ошибки.

Как избавиться от этих ошибок?
Ведь даже при модификации ордера (установке стопа и тейка) и то хватает проверки на стоплевел а тут..
Вот вывод на экране функции pr(), которая вместо оператора принт у меня.

Скрытый текст

[свернуть]

Последний раз редактировалось NSerega; 28.04.2013 в 15:52.
hoz вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 29.04.2013, 11:10   #1245 (permalink)
Прохожий
 
Аватар для SlioptiOn
 
Регистрация: 22.04.2013
Сообщений: 1
Репутация: 1
SlioptiOn
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Поинты: 4

По умолчанию Вопрос к программистам по поводу цвета


Столкнулся с такой проблемой - требуется вместо чисел подставить переменные. Пробовал по разному, но ничего не выходит.

PHP код:
color coli3;
int R1;

--------

coli3=C'255,150,150'
- необходимо вместо чисел '150' подставить значение переменной.

Помогите, кто знает.
SlioptiOn вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 29.04.2013, 14:58   #1246 (permalink)
Почётный гражданин
 
Аватар для qqmber
 
Регистрация: 20.01.2013
Сообщений: 530
Репутация: 386
qqmber - qqmber - qqmber - qqmber -
Сказал(а) спасибо: 57
Поблагодарили 386 раз(а) в 254 сообщениях
Поинты: 439
Сообщение от SlioptiOn Посмотреть сообщение
Столкнулся с такой проблемой - требуется вместо чисел подставить переменные. Пробовал по разному, но ничего не выходит.

PHP код:
color coli3;
int R1;

--------

coli3=C'255,150,150'
- необходимо вместо чисел '150' подставить значение переменной.

Помогите, кто знает.
coli3=255<<16 + X<<8 + X;
qqmber вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 03.05.2013, 10:11   #1247 (permalink)
Активный участник
 
Аватар для smartmans
 
Регистрация: 07.09.2012
Адрес: Москва
Сообщений: 119
Репутация: 82
smartmans
Сказал(а) спасибо: 354
Поблагодарили 81 раз(а) в 45 сообщениях
Поинты: 62
Какая функция отвечает за уровень в индикаторе?

Скрытый текст

[свернуть]

(Аналог #property INDICATOR_LEVELVALUE в МТ5)
smartmans вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 03.05.2013, 10:21   #1248 (permalink)
::: __,,,^._.^,,,__ :::
 
Аватар для ale002
 
Регистрация: 28.02.2010
Сообщений: 1,246
Репутация: 2528
ale002 ale002 ale002 ale002 ale002 ale002 ale002 ale002 ale002 ale002 ale002
Сказал(а) спасибо: 794
Поблагодарили 2,502 раз(а) в 770 сообщениях
Поинты: 670
Свойство:

#property indicator_levelX 100

Хэ - от 1 до 8

Функция:

SetLevelValue(X, 100);

Хэ - от 0 до 31. Почему до 31 - хз
ale002 вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
smartmans (03.05.2013)
Старый 03.05.2013, 10:39   #1249 (permalink)
Активный участник
 
Аватар для smartmans
 
Регистрация: 07.09.2012
Адрес: Москва
Сообщений: 119
Репутация: 82
smartmans
Сказал(а) спасибо: 354
Поблагодарили 81 раз(а) в 45 сообщениях
Поинты: 62
Сообщение от ale002 Посмотреть сообщение
Свойство:

#property indicator_levelX 100

Хэ - от 1 до 8

Функция:

SetLevelValue(X, 100);

Хэ - от 0 до 31. Почему до 31 - хз
Спасибо за быстрый ответ. Почему то работает и без строчки #property indicator_level1 100
smartmans вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
ale002 (03.05.2013)
Старый 03.05.2013, 13:06   #1250 (permalink)
::: __,,,^._.^,,,__ :::
 
Аватар для ale002
 
Регистрация: 28.02.2010
Сообщений: 1,246
Репутация: 2528
ale002 ale002 ale002 ale002 ale002 ale002 ale002 ale002 ale002 ale002 ale002
Сказал(а) спасибо: 794
Поблагодарили 2,502 раз(а) в 770 сообщениях
Поинты: 670
Сообщение от smartmans Посмотреть сообщение
Почему то работает и без строчки #property indicator_level1 100
И это правильно - это 2 разных варианта. Свойство удобно для ручной установки значения, бо к нему есть доступ у пользователя. А функцию лучше юзать когда надо вычислять / менять значение в коде индикатора. При её использовании заданное пользователем вручную значение будет каждый раз затираться при инициализации - даже при переключении ТФ
ale002 вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
smartmans (03.05.2013)
Старый 03.05.2013, 13:13   #1251 (permalink)
Активный участник
 
Аватар для smartmans
 
Регистрация: 07.09.2012
Адрес: Москва
Сообщений: 119
Репутация: 82
smartmans
Сказал(а) спасибо: 354
Поблагодарили 81 раз(а) в 45 сообщениях
Поинты: 62
Если быть точнее, #property indicator_level1 ..
это первое что поиском нашел. Не работает.
Вообщем спасибо, проблема решена вторым вариантом.
smartmans вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 06.05.2013, 09:37   #1252 (permalink)
Почётный гражданин
 
Аватар для Smiles Jack
 
Регистрация: 30.03.2013
Сообщений: 375
Репутация: 304
Smiles Jack Smiles Jack Smiles Jack Smiles Jack
Сказал(а) спасибо: 661
Поблагодарили 303 раз(а) в 183 сообщениях
Поинты: 206

Вопрос Уважаемые программисты помогите дописать пару строчек


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

#property copyright "..............."
#property link "..........."

int ТекущийБар = -1;

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 MediumBlue
#property indicator_color2 Red
//--- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];

int init()
{
//---- indicators
SetIndexStyle(0,DRAW_ARROW);
SetIndexArrow(0,234);
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexEmptyValue(0,0.0);
SetIndexStyle(1,DRAW_ARROW);
SetIndexArrow(1,233);
SetIndexBuffer(1,ExtMapBuffer2);
SetIndexEmptyValue(1,0.0);
//----
return(0);
}


int start()
{
if(ТекущийБар==Bars) return(0);
ТекущийБар=Bars;
if (Open[1] > Open[0])
if (Open[1] < Open[0)
Суть - если условие выполняется, то на графике рисуется стрелка вверх/вниз, в зависимости от того какое условие выполнилось, убил все выходные на поиски, но так и неувидел внятного объяснения,

все примеры основаны на машках и выполняются через функцию iCustom
и пишут что-то вроде такого

double randomValue=iCustom(NULL,0,"RandomIndicator",barsT oProcess,0,i);
или
double signalLast=iCustom("EURUSD",PERIOD_D1,"MACD",12,26 ,9,1,0); но мне туда нечего вставить, я же не беру никакой индикатор за основу????

Должно же быть что-то вроде такого if (Open[1] > Open[0]) то - Print arrow? но как это связать с основными буферами? Вам сейчас смешно, а я всю голову сломал, после выходных могу написать простенького советника, но немогу вывести стрелку на график Прошу не кидать камнями, всю сознательную жизнь я был художником и музыкантом и теперь другое полушарие мозга дает сбой)))

и еще небольшие нюансы - если я буду менять в коде условие if (Open[1] > Open[0]) , на другое, например на if (Close[2] > Close[3]) && (Close[1] > Close[2]) - то оно не доложно влиять ни на что, кроме выводимой на график стрелки. Стрелка должна рисоваться на только что открывшемся баре, если выполнено такое-то условие; не позже на бар, и не раньше, т.е некоторые индикаторы считают еще не закрывшийся бар и потом перерисовывают её на каждом баре в том же направлении, Стрелка не доложна стираться из истории - т.е мы доложны видеть все лоси

Вложение 116753

Вложение 116754

это пример выполнения условия

Пожалуйста не оставьте без внимания, больше не к кому обратиться
И извините если вопрос совсем дурацкий, я человек не глупый, но абсолютно в других областях))

Последний раз редактировалось Smiles Jack; 16.12.2013 в 19:20.
Smiles Jack вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 08.05.2013, 10:14   #1253 (permalink)
Почётный гражданин
 
Аватар для qqmber
 
Регистрация: 20.01.2013
Сообщений: 530
Репутация: 386
qqmber - qqmber - qqmber - qqmber -
Сказал(а) спасибо: 57
Поблагодарили 386 раз(а) в 254 сообщениях
Поинты: 439
Надо непустое значение в соответствующий буфер закинуть.
if (Open[1] > Open[0]) ExtMapBuffer1[0]=Open[0];
if (Open[1] < Open[0]) ExtMapBuffer2[0]=Open[0];
qqmber вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
Smiles Jack (08.05.2013)
Старый 08.05.2013, 14:09   #1254 (permalink)
hoz
Активный участник
 
Аватар для hoz
 
Регистрация: 01.04.2011
Сообщений: 530
Репутация: 111
hoz hoz
Сказал(а) спасибо: 59
Поблагодарили 112 раз(а) в 88 сообщениях
Поинты: 538
Отправить сообщение для hoz с помощью ICQ
Что-то не выходит у меня чётко прописать условия, чтоб на ТФ М5 в момент касания т.е. пересечения значения индикатора RSI открывался ордер. Как это условие задать?
У меня раньше было так:

PHP код:
if (iRSI(NULL,5,14,PRICE_CLOSE,1) > i_RSIToUpLimit)
      if (
iRSI(NULL,5,14,PRICE_CLOSE,0) < (i_RSIToUpLimit))
         return (
SIGNAL_BUY); 

Здесь i_RSIToUpLimit уровень индикатора RSI. Как я узнал, что значение индикатора получаются только по цене открытия (хотя в документации этого не встречал ранее).
Получается максимально точно факт пересечения уровня можо получить на ТФ М1 ? Тогда в параметр ТФ вставить 1, а значение периода 14 домножить на 5, верно?
Но вот всё равно иногда открытие ордера не там где нужно происходит в моё случае.
hoz вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 08.05.2013, 14:25   #1255 (permalink)
Почётный гражданин
 
Аватар для qqmber
 
Регистрация: 20.01.2013
Сообщений: 530
Репутация: 386
qqmber - qqmber - qqmber - qqmber -
Сказал(а) спасибо: 57
Поблагодарили 386 раз(а) в 254 сообщениях
Поинты: 439
Сообщение от hoz Посмотреть сообщение
Как я узнал, что значение индикатора получаются только по цене открытия (хотя в документации этого не встречал ранее).
Ничего подобного, значение индикатора [0] пересчитывается на каждом тике.
qqmber вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 08.05.2013, 16:02   #1256 (permalink)
Почётный гражданин
 
Аватар для Smiles Jack
 
Регистрация: 30.03.2013
Сообщений: 375
Репутация: 304
Smiles Jack Smiles Jack Smiles Jack Smiles Jack
Сказал(а) спасибо: 661
Поблагодарили 303 раз(а) в 183 сообщениях
Поинты: 206
qqmber - Большое вам человеческое спасибо!!!!!!!!!!!!!! Вы мне облегчили понимание основ MQL, будем изучать дальше)))))))))
Smiles Jack вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 10.05.2013, 10:51   #1257 (permalink)
hoz
Активный участник
 
Аватар для hoz
 
Регистрация: 01.04.2011
Сообщений: 530
Репутация: 111
hoz hoz
Сказал(а) спасибо: 59
Поблагодарили 112 раз(а) в 88 сообщениях
Поинты: 538
Отправить сообщение для hoz с помощью ICQ
Понадобилось реализовать функцию, которая изменяет флаг открытия ордера, если есть причины.
У меня int GetGeneralSignal() - функция, которая получает сигнал для открытия позиций.
int FindOrders(bool& long, bool& short) - функция подсчитывает количество открытых позиций и изменяет флаг открытия, если требуется.
Суть такая. Изначально в GetGeneralSignal() флаги short и long имеют положение true. Дальше, если открытых ордеров нет, то флаги должны остаться в положении true. А если имеются открытые ордера, то проверяется профит ордеров. Если профит ордера заданного типа меньше заданного значения в моём случает меньше нуля, то открывать в ордера того типа нельзя и флаг соот-но переводится в режим false для данного типа.
Таким образом, я хочу, чтоб при наличии ордеров с минусовым профитом эксперт не открывал ордера, в тут сторону, где есть ордера с минусовым профитом.

Я сделал так:

Скрытый текст

PHP код:
//+-------------------------------------------------------------------------------------+
//| Поиск своих ордеров                                                                 |
//+-------------------------------------------------------------------------------------+
int FindOrders(boollongboolshort)
{
   
int ttotal OrdersTotal() - 1;
   
   for (
int i=totali>=0i--)
   {
      if (!
OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
          if (
OrderSymbol() != Symbol()) continue;
              if (
OrderMagicNumber() != i_magic) continue;
              {
                 if (
OrderType() == OP_BUY)        // Найден ордер типа OP_BUY
                 
{
                     if (
OrderProfit() < 0)        // Если профит ордера ниже заданного значения,..
                         
long false;              // .. покупка запрещена
                 
}

                 if (
OrderType() == OP_SELL)       // Найден ордер типа OP_SELL
                 
{
                     if (
OrderProfit() < 0)        // Если профит ордера ниже заданного значения,..
                         
short false;             // .. продажа запрещена
                 
}
                 
t++;
              }
   }
   
   return (
t);

[свернуть]


Скрытый текст

PHP код:
//+-------------------------------------------------------------------------------------+
//| Получаем общий торговый сигнал                                                      |
//+-------------------------------------------------------------------------------------+
int GetGeneralSignal()
{
   
bool short true,
        
long true;
        
   if (
FindOrders(shortlong) > 3)
       return (
SIGNAL_NO);
 
   if (
GetRSI(1) < i_RSIToUpLimit)
      if (
GetRSI(0) > i_RSIToUpLimit)
      {
         if (
long == true)
             return (
SIGNAL_BUY);
      }
   if (
GetRSI(1) > i_RSIToDnLimit)
      if (
GetRSI(0) < i_RSIToDnLimit)
      {
         if (
short == true)
             return (
SIGNAL_SELL);
      }
            
   return (
SIGNAL_NO);

[свернуть]



Но ордера открываются не всегда. Вот что я при старте эксперта вижу (флаг для покупок почему-то false), хотя ордеров типа OP_BUY нет, а значит режим false не должен быть.

PHP код:
2013.05.10 12:11:23    2012.05.21 00:35  Kevin_Martens_RSI EURUSD,M5short 1
2013.05.10 12
:11:23    2012.05.21 00:35  Kevin_Martens_RSI EURUSD,M5long 0
2013.05.10 12
:11:15    2012.05.21 00:30  Kevin_Martens_RSI EURUSD,M5short 1
2013.05.10 12
:11:15    2012.05.21 00:30  Kevin_Martens_RSI EURUSD,M5long 0
2013.05.10 12
:11:14    2012.05.21 00:25  Kevin_Martens_RSI EURUSD,M5short 1
2013.05.10 12
:11:14    2012.05.21 00:25  Kevin_Martens_RSI EURUSD,M5long 0
2013.05.10 12
:11:14    2012.05.21 00:20  Kevin_Martens_RSI EURUSD,M5short 1
2013.05.10 12
:11:14    2012.05.21 00:20  Kevin_Martens_RSI EURUSD,M5long 

Скрытый текст

[свернуть]

Последний раз редактировалось NSerega; 10.05.2013 в 12:49.
hoz вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 10.05.2013, 13:15   #1258 (permalink)
hoz
Активный участник
 
Аватар для hoz
 
Регистрация: 01.04.2011
Сообщений: 530
Репутация: 111
hoz hoz
Сказал(а) спасибо: 59
Поблагодарили 112 раз(а) в 88 сообщениях
Поинты: 538
Отправить сообщение для hoz с помощью ICQ
Касаясь предыдущего поста, я переписал функцию int FindOrders(bool& long, bool& short):

Скрытый текст

PHP код:
//+-------------------------------------------------------------------------------------+
//| Поиск своих ордеров                                                                 |
//+-------------------------------------------------------------------------------------+
int FindOrders(boollongboolshort)
{
   
int ttotal OrdersTotal() - 1;
   
double profitL,               // Профит лонговой позиции
          
profitS;               // Профит шортовой позиции
   
   
for (int i=totali>=0i--)
   {
      if (!
OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
          if (
OrderSymbol() != Symbol()) continue;
              if (
OrderMagicNumber() != i_magic) continue;
              {
                 if (
OrderType() == OP_BUY)        // Найден ордер типа OP_BUY
                 
{
                     Print(
"if (OrderType() == OP_BUY)");
                     
profitL OrderProfit();
                     if (
profitL OrderProfit())
                         if (
profitL 0)
                         
long false;
                 }

                 else if (
OrderType() == OP_SELL)       // Найден ордер типа OP_SELL
                 
{
                     Print(
"if (OrderType() == OP_SELL)");
                     
profitS OrderProfit();
                     if (
profitS OrderProfit())
                         if (
profitS 0)
                         
long false;
                 }
                 
t++;
              }
   }
   
   return (
t);

[свернуть]

Последний раз редактировалось NSerega; 11.05.2013 в 00:11.
hoz вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 10.05.2013, 14:05   #1259 (permalink)
Почётный гражданин
 
Аватар для qqmber
 
Регистрация: 20.01.2013
Сообщений: 530
Репутация: 386
qqmber - qqmber - qqmber - qqmber -
Сказал(а) спасибо: 57
Поблагодарили 386 раз(а) в 254 сообщениях
Поинты: 439
У вас порядок переменных в описании функции не соответствует порядку при вызове.
Сообщение от hoz Посмотреть сообщение
int FindOrders(bool& long, bool& short)
if (FindOrders(short, long) > 3)
qqmber вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
hoz (10.05.2013)
Старый 10.05.2013, 20:07   #1260 (permalink)
hoz
Активный участник
 
Аватар для hoz
 
Регистрация: 01.04.2011
Сообщений: 530
Репутация: 111
hoz hoz
Сказал(а) спасибо: 59
Поблагодарили 112 раз(а) в 88 сообщениях
Поинты: 538
Отправить сообщение для hoz с помощью ICQ
Сообщение от qqmber Посмотреть сообщение
У вас порядок переменных в описании функции не соответствует порядку при вызове.

Поправил. Вот что щяс имеется. Я прописал комменты к коду:

Скрытый текст

PHP код:
//+-------------------------------------------------------------------------------------+
//| Поиск своих ордеров                                                                 |
//+-------------------------------------------------------------------------------------+
int FindOrders(boollongboolshort)
{
   
int ttotal OrdersTotal() - 1;
   
double profitL,               // Профит лонговой позиции
          
profitS;               // Профит шортовой позиции
   
   
for (int i=totali>=0i--)
   {
      if (!
OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
          if (
OrderSymbol() != Symbol()) continue;
              if (
OrderMagicNumber() != i_magic) continue;
              {
                 if (
OrderType() == OP_BUY)              // Найден ордер типа OP_BUY
                 
{
                     if (
profitL OrderProfit())
                     {
                         
profitL OrderProfit();
                         
pr("profitL =" profitL);      // Выводим профим через коммент на график
                         
if (profitL 0)                // Если профит минусовой
                         
long false;                   // .. возводим флаг.. "покупки запрещены"
                     
}
                 }

                 else if (
OrderType() == OP_SELL)       // Найден ордер типа OP_SELL
                 
{
                     if (
profitS OrderProfit())
                     {
                         
pr("profitS =" profitS);     // Выводим профим через коммент на график
                         
profitS OrderProfit();
                         if (
profitS 0)               // Если профит минусовой..
                         
short false;                 // .. возводим флаг.. "продажи запрещены"
                     
}
                 }
                 
t++;
              }
   }
   
   return (
t);

[свернуть]



Скрытый текст

PHP код:
//+-------------------------------------------------------------------------------------+
//| Получаем общий торговый сигнал                                                      |
//+-------------------------------------------------------------------------------------+
int GetGeneralSignal()
{
   
bool short true,
        
long true;
        
   if (
FindOrders(longshort) > 15)
       return (
SIGNAL_NO);

   Print(
"long = "long);
   Print(
"short = "short);
      
   if (
GetRSI(1) < i_RSIToUpLimit)
      if (
GetRSI(0) > i_RSIToUpLimit)
      {
         if (
long == true)
             return (
SIGNAL_BUY);
      }
           
   if (
GetRSI(1) > i_RSIToDnLimit)
      if (
GetRSI(0) < i_RSIToDnLimit)
      {
         if (
short == true)
             return (
SIGNAL_SELL);
      }
            
   return (
SIGNAL_NO);

[свернуть]



Флаг "железно" в ТРУ постоянно (на скрине ТП баев минусовый, а флаг в ТРУ):

Скрытый текст

[свернуть]

Последний раз редактировалось NSerega; 11.05.2013 в 00:11.
hoz вне форума   Ответить с цитированиемОтветить с цитированием  
Ответ

Метки
mql4, mql4 помощь, вопросы mql4


Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Выкл.
Pingbacks are Выкл.
Refbacks are Выкл.



Текущее время: 18:26. Часовой пояс GMT.


Перевод: zCarot
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd.
SEO by vBSEO