Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 153

 
EVladMih:

Артемида, ты со второго же поста начал объяснять человеку, что он совмещает белое с горячим, а единственное, что ты объяснил - это ту часть вопроса, о которой тебя никто не спрашивал. Я случайно знаю сколько кода написал этот человек, а не вник в суть ТЫ, а не он. Кстати, этот код он пишет не для себя, а для людей.

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

Мужики, кто посерьезней разбирается - помогите, плз., satorifx. Ему действительно нужно совместить белое с горячим, но не его в этом вина... Сами знаете специфику МТ4, в котором вещи из одной оперы поются на разных сценах (разные системы координат).

Во-первых. С вами я на "ты" не переходил. Во-вторых - научитесь правильно читать хотя бы ник человека, раз по имени не можете. В третьих - дам подсказку как определить пересечение с трендовой. В примере, написанном специально для новичков, сама трендовая линия для расчётов не используется. Это только подсказка в каком направлении двигаться. Хотя методов решения данной задачки - уйма и маленькая тележка. Не нужно зацикливаться на проблеме несовместимости координат, а нужно решать как выйти из положения с имеющимися входными данными.

И... это... я могу написать то, что вам ещё не снилось...

 

EVladMih:,

но наверно не стоит делить людей по баням исходя из принципа местный/неместный.

Дело не в "местности/неместности" конкретного человека. Дело в том каким образом человек задаёт вопрос. Если я ошибся в правильном понимании сути его вопроса, то это не даёт ему права мне хамить. Я честно попытался ему помочь. И, думаю, если б он сказал после моего ему ответа, что это не то, что он хотел и просил, и объяснил конкретно поставленную ему задачу, мы бы придумали как всё сделать и быстро и качественно.

Сейчас вы говорите о том, что он не может определить пересечение с трендовой линией. Но это же вызывает только улыбку. Или я опять не правильно всё понял и достоин очередного хамства? Простейшая функция ObjectGetValueByShift() вернёт вам цену трендовой линии на определённом баре. Вот и сравнивайте одну цену с другой.

 
artmedia70:
Я так понимаю, ему нужно чтобы объект по горизонтали не смещался, а по вертикали позиционировался по наименьшей цене видимых на экране баров. Я ему показал первую часть его вопроса - как вообще найти минимальную цену на графике. Он меня не понял и облаял. Теперь пусть сам ищет как сделать без скрещивания двух систем координат то, что ему нужно. А это просто. Может кто другой ему и сделает за него, а я откланиваюсь. Не люблю хамов и халявщиков - он даже не потрудился вникнуть в суть и хоть что-то самому написать в коде.

artmedia70, я человек неконфликтный, и если что-то не так ляпнул - приношу извинения и прошу не считать это хамством.

Проблему действительно не знаю, как решить.

Скрестил 2 системы координат пока по-простому: сделал label и вручную помещаю его на минимум цены - таким образом у меня есть координата Y лейбла и она соответствует минимальной цене, которую получаю функцией WindowPriceMin() . Но это вручную, а хотелось бы программно это отслеживать и корректировать.

Если для этого действительно есть решение, да еще и простое, буду благодарен за помощь.


 
artmedia70:

Сейчас вы говорите о том, что он не может определить пересечение с трендовой линией. Но это же вызывает только улыбку. Или я опять не правильно всё понял и достоин очередного хамства? Простейшая функция ObjectGetValueByShift() вернёт вам цену трендовой линии на определённом баре. Вот и сравнивайте одну цену с другой.


Не слушайте EVladMih'а - ерунду пишет.
Как найти расстояние до трендовой, если речь идет о цене, я прекрасно знаю. Вопрос в другом.

Я в своем индикаторе использую метки, которые постоянно висят в верхней части экрана. Именно после сдвига любой метки необходимо определить расстояние от метки до трендовой линии, но метки имеют координаты (x,y) на экране, а ObjectGetValueByShift работает с ценой, т.е. в другой системе координат. Отсюда и пошла вся заварушка.

Заранее скажу, что вместо меток использовать например объект OBJ_TEXT с ценовыми координами не могу, т.к. необходимо, чтобы они(метки) не свдигались с ценой, если двигать ценовой график, а висели на одном месте, как это делают метки (объект OBJ_LABEL)

 
satorifx:

Не слушайте EVladMih'а - ерунду пишет.
Как найти расстояние до трендовой, если речь идет о цене, я прекрасно знаю. Вопрос в другом.

Я в своем индикаторе использую метки, которые постоянно висят в верхней части экрана. Именно после сдвига любой метки необходимо определить расстояние от метки до трендовой линии, но метки имеют координаты (x,y) на экране, а ObjectGetValueByShift работает с ценой, т.е. в другой системе координат. Отсюда и пошла вся заварушка.

Заранее скажу, что вместо меток использовать например объект OBJ_TEXT с ценовыми координами не могу, т.к. необходимо, чтобы они(метки) не свдигались с ценой, если двигать ценовой график, а висели на одном месте, как это делают метки (объект OBJ_LABEL)

Чтобы не заморачиваться с пересчётами, вместо метки используйте ARROW с постоянной коорданатой х = определённому бару. Бар можете хранить и изменять в описании к объекту. Как только объект перемещён, вписываете в его описание новую координату х, равную новому бару. Тогда проблем с поиском цены не будет. И всегда по описанию определите местоположение объекта по горизонтальной оси. Вертикальная ось - цена. Это менее затратный вариант. И объект всегда будет находиться по оси х на одном и том же месте, соответствующему конкретному номеру бара.

ЗЫ "...приношу извинения и прошу не считать это хамством..." Всё ОК, проехали... ;)

 

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

if (Time[0]<=PrevTime) return(0);

PrevTime=Time[0];

теперь рисует только на новой свече. Подскажите как быть. Текст индюка.

P/S/ Кстати еще прикол. Все пары нормально показывает. Захотел посмотреть Appl к рублю. Не хочет ни в какую.

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Lime
//--- input parameters
extern string Paar_1="EURUSD"; // Желаемый интрумент для сравнения
extern string Paar_2="GBPUSD"; // Желаемый интрумент для сравнения
extern bool Mirroring_Paar_2=false;
//--- buffers
double ExtMapBuffer1[];
static int PrevTime=0;
int start=1;


//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
string short_name=Paar_1;
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,ExtMapBuffer1);
IndicatorShortName(short_name);
SetIndexLabel(0,short_name);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
if (Time[0]<=PrevTime && start==1) return(0);
PrevTime=Time[0];
int i, counted_bars=IndicatorCounted();
i=counted_bars-1;
//----
while(i>=0){
double Compare1=iClose(Paar_1,0,iBarShift(Paar_1,0,iTime(Paar_1,0,i),FALSE));
double Compare2=iClose(Paar_2,0,iBarShift(Paar_1,0,iTime(Paar_1,0,i),FALSE));
if(Compare2!=0 && Compare1!=0) double Compare=Compare1/Compare2;
if(Mirroring_Paar_2==1) Compare=1/Compare;

ExtMapBuffer1[i]=Compare;
RefreshRates();
i--;
}
//----
start=0;
return(0);
}
//+------------------------------------------------------------------+y

 
Здравствуйте!
Помогите, забыл!! Как сделать задержку между открытиями ордеров, Sleep 3000? а как точно не помню.
int start() {
string ls_0;
int li_8;
bool li_12;
int li_20;
int li_24;
double ld_28;
int li_36;
int li_40;
string ls_48;
string ls_56;
string ls_64;
double ld_76;
int li_84;
И вроде здесь должно вставляться.

На всякий случай сама сова

Еще вопрос эта сова ставиться сразу на семь пар, мне именно нужно сделать паузу между открытием ордеров! Например сегодня на новостях открылось 10 ордеров одновременно, а мне нужно с задержкой.

Спасибо!

/* Декомпил удален - Vinin */

 

Не много вспомнил, подскажите куда тут правильно вставить Sleep(60000); чтоб была задержка между открытиями

if (ai_8 == OP_BUY) ad_20 = Ask;
if (ai_8 == OP_SELL) ad_20 = Bid;
if (!IsTradeContextBusy()) {
li_68 = OrderSend(as_0, ai_8, ad_12, NormalizeDouble(ad_20, MarketInfo(as_0, MODE_DIGITS)), ai_28, NormalizeDouble(ad_32, MarketInfo(as_0, MODE_DIGITS)), NormalizeDouble(ad_40,
MarketInfo(as_0, MODE_DIGITS)), as_48, ai_56, ai_60, ai_64);
if (li_68 > 0) {
Print("orderSendReliable(): Success! Ticket: " + li_68);
return (li_68);
}



 

Украсть то украли, а вот что делать с етим то понятия не имеете))

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

поетому могу быть и не прав

int counterrore=0, //подщет количества ошибок открытия ордера
timesleep=10000; // время задержки
while () // до тех пор пока не будет выход с цыкла
{
 if (!IsTradeContextBusy())
 { 
  RefreshRates(); // последние данные
  if (ai_8 == OP_BUY) ad_20 = Ask;
  if (ai_8 == OP_SELL) ad_20 = Bid;
  li_68 = OrderSend(as_0, ai_8, ad_12, NormalizeDouble(ad_20, MarketInfo(as_0, MODE_DIGITS)), ai_28, NormalizeDouble(ad_32, MarketInfo(as_0, MODE_DIGITS)), NormalizeDouble(ad_40,
  MarketInfo(as_0, MODE_DIGITS)), as_48, ai_56, ai_60, ai_64);
  if (li_68 > 0) 
  {
   Print("orderSendReliable(): Success! Ticket: " + li_68);
   return (li_68);
  }
  Print("orderSendReliable(): False! Error " + GetlastError()); // поищите коректную функцию обработки ошибок
  counterrore++; // количество неудач - сумирование

  if(counterrore>6) // если не удалось 6 раз открыть
  {
   Print("orderSendReliable(): Error!!! " +counterrore+"times --return(-1)" ); // сообщаем логу о даной трагедии
   return (-1); // -1 или что там Вы придумаете для отработки ситуации
  }
 }
 Sleep (timesleep); // время сна для цикла посылки  запроса на сервер и для !IsTradeContextBusy()
}
 
Сейчас модераторы придут и забанят двух последних передо мной :-))
Причина обращения: