Перейти к содержимому

Theme© by Fisana
 

Фотография
* * * * * 68 Голосов

Написание экспертов и индикаторов - бесплатно!


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 18761

#3481 Necron

Necron

    Пошёл в рукопашку

  • Специалист
  • PipPipPipPipPipPipPipPipPipPipPip
  • 683 сообщений

Отправлено 18 March 2011 - 23:56

Мои приветствия.
Народ, а почему я не могу создать тему?
:blink:


otapk, пользователи с количеством сообщений меньше 10 несколько ограничиваются в правах... И одно из ограничений как раз запрет создания новых тем, чтобы не спамили. :wall:
Каждый сам кузнец своей судьбы.

 
 

#3482 Alen_T

Alen_T

    Есть ещё порох в пороховницах

  • Специалист
  • PipPipPipPipPipPipPipPipPipPipPipPip
  • 874 сообщений

Отправлено 19 March 2011 - 00:03

Спасибо, с этой проблемой я уже разобрался, там на самом деле была затыка в -Corridor это числовое значение, оно должно быть в пунктах и я просто промограл, сейчас поправил.. Теперь новая проблемка. что то с lasttime. На этот раз я выложил другой кусок кода, но и на старый проблема тоже распространяется. По идее lasttime должен запоминать время открытия последнего ордера, чтобы брать информацию только из последнего открытого ордера. Но видимо я что-то не то сделал..


Сделай функцию определения времени открытия последнего ордера ( например TimeLastOpen()) и вставь вместо int LastTime; - > int LastTime = TimeLastOpen(); те Присвой это время (а не НОЛЬ) переменной lasttime.
А далее посмотри http://fxgeneral.com...topic=1443&st=0 - описан порядок просмотра ордеров.
  • Kortizon это нравится
Ты это, заходи, если что...(С)

#3483 Batmannk

Batmannk

    Расстрелял целый магазин

  • Пользователи
  • PipPipPipPip
  • 54 сообщений

Отправлено 19 March 2011 - 00:24

Сделай функцию определения времени открытия последнего ордера ( например TimeLastOpen()) и вставь вместо int LastTime; - > int LastTime = TimeLastOpen(); те Присвой это время (а не НОЛЬ) переменной lasttime. и тд.
В последнем тексте int LastTime при переборе ордеров всегда равно OrderOpenTime() выбранного ордера


Немного не понял, ты имел ввиду сначала написать функцию определяющую последнее время открытия по истории типа такого
double TimeLastOpen(){
int TimeLastOpen;
for (int i=0; i<OrdersHistoryTotal(); i++) {
if (TimeLastOpen<OrderOpenTime()) TimeLastOpen=OrderOpenTime();}
return (TimeLastOpen); }
А потом приравнять к этому значению LastTime?
На самом деле либо я неправильно понял, либо затея сомнительна.. Я конечно попробовал но результат 0

#3484 Alen_T

Alen_T

    Есть ещё порох в пороховницах

  • Специалист
  • PipPipPipPipPipPipPipPipPipPipPipPip
  • 874 сообщений

Отправлено 19 March 2011 - 00:37

Ребят, помогите пожалуйста, объясните где ошибка, почему этот кусок не работает?


double NextLots() {
int LastTime;
double NLot;
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS)) {
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic){
if (LastTime < OrderOpenTime()) {
LastTime = OrderOpenTime();
NLot = OrderLots() * 2;
return (NLot);
}
}
}
}
}


Он почему то умножает лот первой сделки, а не последней..

Потому что любая сделка (1-я поданная на проверку будет подходить условию if (LastTime < OrderOpenTime(). тк LastTime при инициализации (int LastTime;) равна нулю.
Ты это, заходи, если что...(С)

#3485 dennski

dennski

    Первый выстрел

  • Пользователи
  • PipPip
  • 3 сообщений

Отправлено 19 March 2011 - 00:40

1. Пара чего?
2. Отображаемые уровни от чего, в чем (%, пипсы, попугаи...)?
3. Окно оcновное (цены) или в отдельном окне? Разность - величина значительно меньшая, чем значение стохастиков - значит будет ниже (и значительно) или (если отрицательная - то где?).
т.е. разность можно изобразить только на отдельном окне. Вот.:scratch_head:

Попробую еще раз:


Мы имеем два финансовых инструмента , к примеру EUR/USD и GBP/USD и соответственно два стохастика; нужно чтобы эти два стохастика отображались в одном окне;

Разность - abs( stoch(eur/usd) - stoch(gbp/usd)) ,

Как только эта разность больше 80, то звуковой сигнал.






#3486 Batmannk

Batmannk

    Расстрелял целый магазин

  • Пользователи
  • PipPipPipPip
  • 54 сообщений

Отправлено 19 March 2011 - 00:42

Потому что любая сделка (1-я поданная на проверку будет подходить условию if (LastTime < OrderOpenTime(). тк LastTime при инициализации (int LastTime;) равна нулю.


Так и ладно, пусть проходит. Почему же первая то не должна проходить?) Она проходит, запоминается ее время (чтоб больше ее уже не брать), берется из нее лот, множится и дальше с умноженным лотом открывается следующая сделка, которая опять же запоминается и т.д... Логика нормальная, и у меня по данному принципу мартин работает ( я собственно из него и взял кусок, только переделал, чтоб не из истории брал данные, а из реал тайма), и он перестал работать...

#3487 Alen_T

Alen_T

    Есть ещё порох в пороховницах

  • Специалист
  • PipPipPipPipPipPipPipPipPipPipPipPip
  • 874 сообщений

Отправлено 19 March 2011 - 01:02

Попробую еще раз:


Мы имеем два финансовых инструмента , к примеру EUR/USD и GBP/USD и соответственно два стохастика; нужно чтобы эти два стохастика отображались в одном окне;

Разность - abs( stoch(eur/usd) - stoch(gbp/usd)) ,

Как только эта разность больше 80, то звуковой сигнал.

Все понятно и доходчиво объяснил. Но не совсем.
Т.е. направление неважно? А разницу рисовать не надо?
Ты это, заходи, если что...(С)

#3488 Alen_T

Alen_T

    Есть ещё порох в пороховницах

  • Специалист
  • PipPipPipPipPipPipPipPipPipPipPipPip
  • 874 сообщений

Отправлено 19 March 2011 - 01:16

Отбой. Goog night!
Ты это, заходи, если что...(С)

#3489 Michelangelo®

Michelangelo®

    МОРДЕ-РАПТОР

  • Профи
  • PipPipPipPipPipPipPipPipPipPipPipPipPip
  • 1003 сообщений

Отправлено 19 March 2011 - 14:32

Ребят, помогите пожалуйста, объясните где ошибка, почему этот кусок не работает?


double NextLots() {
int LastTime;
double NLot;
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS)) {
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic){
if (LastTime < OrderOpenTime()) {
LastTime = OrderOpenTime();
NLot = OrderLots() * 2;
return (NLot);
}
}
}
}
}


Он почему то умножает лот первой сделки, а не последней..

вынеси return(NLot); за цикл... :)
  • Batmannk это нравится
Изображение
Возможно все! ...что ниже скорости света!
Невозможное делаю сразу! Чудо требует незначительной подготовки...
Пришел, увидел, нафлудил...

Изображение

#3490 Batmannk

Batmannk

    Расстрелял целый магазин

  • Пользователи
  • PipPipPipPip
  • 54 сообщений

Отправлено 19 March 2011 - 15:24

Michelangelo, спасибо огромное!! Блин вот так всегда, тупая мелкая ошибка, и начинаешь думать что код неправильный вообще))
Можешь еще помочь с той же самой ошибкой, только в другом куске, уже торговом?

if (OrdersTotal()>1 && OrdersTotal()<Max_orders) {
for (int a=0; a<OrdersTotal(); a++) {
if (OrderSelect(a, SELECT_BY_POS)) {
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) {
if (LastTime < OrderOpenTime()) {
LastTime = OrderOpenTime();
if (OrderProfit()==-Corridor*OrderLots()*10) {
if(OrderType()==OP_BUY)
OrderSend(Symbol(), OP_SELL, NextLots(), Bid, Slippage, Bid + (2*Corridor)*Point, Bid - Corridor * Point, NameExpert, Magic, 0, colorOpenSell);
if(OrderType()==OP_SELL)
OrderSend(Symbol(), OP_BUY, NextLots(), Ask, Slippage, Ask - (2*Corridor)*Point, Ask + Corridor * Point, NameExpert, Magic, 0, colorOpenBuy);
}
}
}
}
}
}


Тоже самое, берет тип сделки не из последней сделки, а из первой.. Тут return-а нет, и я хз просто как сделать..


P.S все в общем, разобрался, вынес эту надоевшую LastTime в отдельную bool функцию, теперь все работает)

#3491 Michelangelo®

Michelangelo®

    МОРДЕ-РАПТОР

  • Профи
  • PipPipPipPipPipPipPipPipPipPipPipPipPip
  • 1003 сообщений

Отправлено 19 March 2011 - 17:10

Michelangelo, спасибо огромное!! Блин вот так всегда, тупая мелкая ошибка, и начинаешь думать что код неправильный вообще))
Можешь еще помочь с той же самой ошибкой, только в другом куске, уже торговом?

if (OrdersTotal()>1 && OrdersTotal()<Max_orders) {
for (int a=0; a<OrdersTotal(); a++) {
if (OrderSelect(a, SELECT_BY_POS)) {
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) {
if (LastTime < OrderOpenTime()) {
LastTime = OrderOpenTime();
if (OrderProfit()==-Corridor*OrderLots()*10) {
if(OrderType()==OP_BUY)
OrderSend(Symbol(), OP_SELL, NextLots(), Bid, Slippage, Bid + (2*Corridor)*Point, Bid - Corridor * Point, NameExpert, Magic, 0, colorOpenSell);
if(OrderType()==OP_SELL)
OrderSend(Symbol(), OP_BUY, NextLots(), Ask, Slippage, Ask - (2*Corridor)*Point, Ask + Corridor * Point, NameExpert, Magic, 0, colorOpenBuy);
}
}
}
}
}
}


Тоже самое, берет тип сделки не из последней сделки, а из первой.. Тут return-а нет, и я хз просто как сделать..


P.S все в общем, разобрался, вынес эту надоевшую LastTime в отдельную bool функцию, теперь все работает)

сделай так...

int ticket=-1;
if (OrdersTotal()>1 && OrdersTotal()<Max_orders) {
   for (int a=0; a<OrdersTotal(); a++) {
      if (OrderSelect(a, SELECT_BY_POS)) {
 		if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) {
            if (LastTime < OrderOpenTime()) {
       		LastTime = OrderOpenTime();
       		ticket=OrderTicket();
            }
 		}
      }
   }
}
if(OrderSelect(ticket,SELECT_BY_TICKET)){   
   if (OrderProfit()==-Corridor*OrderLots()*10) {
      if(OrderType()==OP_BUY) OrderSend(Symbol(), OP_SELL, NextLots(), Bid, Slippage, Bid + (2*Corridor)*Point, Bid - Corridor * Point, NameExpert, Magic, 0, colorOpenSell); 
      if(OrderType()==OP_SELL) OrderSend(Symbol(), OP_BUY, NextLots(), Ask, Slippage, Ask - (2*Corridor)*Point, Ask + Corridor * Point, NameExpert, Magic, 0, colorOpenBuy); 
   }
}


т.е. ты вводишь переменную ticket и находишь самый последний ордер... цикл закончен - результат номер последнего ордера...
затем (вне цикла) ты выбираешь этот ордер и работаешь с его параметрами...

и еще - будут ошибки при работе на реале... необходимо нормализовать цены и стопы функцией Normalisedouble
Изображение
Возможно все! ...что ниже скорости света!
Невозможное делаю сразу! Чудо требует незначительной подготовки...
Пришел, увидел, нафлудил...

Изображение

#3492 KRANOVSCHIK

KRANOVSCHIK

    Расстрелял целый магазин

  • Пользователи
  • PipPipPipPip
  • 43 сообщений

Отправлено 19 March 2011 - 21:56

Облегчу немного работу Уважаемому , вот советник по индикаторам Sniper но, без Megatrenda.
Извините, сам не проверял.

Спасибо за помощь :beer2: Ночку погуглил и версия 3.11 на компе . Там есть ex4. файлы , думаю посвежей .



#3493 Leonix

Leonix

    Выпустил первую очередь

  • Пользователи
  • PipPipPip
  • 22 сообщений

Отправлено 19 March 2011 - 21:57

Доброго времени суток! Уважаемые программисты помогите прикрепить к этому советнику:

1. Трейлинг стоп с заданным шагом

2. Время торговли

3. Магик

3. Манименеджмент (использование в открытых сделках не более % от капитала). true/false

Прикрепленные файлы



#3494 Destr

Destr

    Первый выстрел

  • Частый гость
  • PipPip
  • 7 сообщений

Отправлено 20 March 2011 - 01:41

Доброго времени суток! Уважаемые программисты помогите прикрепить к этому советнику:

1. Трейлинг стоп с заданным шагом

2. Время торговли

3. Магик

3. Манименеджмент (использование в открытых сделках не более % от капитала). true/false




помогите мне.мой пост 3438!

#3495 Batmannk

Batmannk

    Расстрелял целый магазин

  • Пользователи
  • PipPipPipPip
  • 54 сообщений

Отправлено 20 March 2011 - 02:17

Michelangelo, еще раз спасибо. Но я же там в P.S. написал, что решил уже проблему) Но с тем же советником возникла опять трабла, ну не хватает моих знаний.. В общем захотелось мне сделать закрытие всех позиций при достижении определенной прибыли. Моего мозга хватило только вот на это

if (ExistPositions()) {
   if (AccountProfit()>=Corridor*Lot()*10) {
       bool   result;
         double price;
         int    error;
      if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES))
     {
         while(ExistPositions())
           {
            if(OrderType()==OP_BUY) price=Bid;
            else            price=Ask;
            result=OrderClose(OrderTicket(),OrderLots(),price,3,CLR_NONE);
            if(result!=TRUE) { error=GetLastError(); Print("LastError = ",error); }
           else error=0;
            if(error==135) RefreshRates();
            else break;
           }
        }
     
   else Print( "Error when order select ", GetLastError());
}
return(0);}

Но в итоге почему то если 1 ордер, то он правильно закрывает, а если больше, то там совсем другая прибыль получается.. Какие есть альтернативы вот этой строчке if (AccountProfit()>=Corridor*Lot()*10) ?

Ну а NormalizeDouble потом введу, если результаты нормальными окажутся..



Copyright © 2024 Your Company Name