Ответ
 
Опции темы
Старый 14.04.2015, 09:19   #3761 (permalink)
Почётный гражданин
 
Аватар для matro3
 
Регистрация: 18.07.2013
Сообщений: 349
Репутация: 344
matro3 matro3 matro3 matro3
Сказал(а) спасибо: 25
Поблагодарили 340 раз(а) в 143 сообщениях
Поинты: 160
Код:
bool CheckDistanceOrders(string sy = "", int op = -1, int mn = -1, ushort pp = 0)
{
   int      i, k = OrdersTotal();
   if(sy == "0") sy = Symbol();
   for(i = 0; i < k; i ++)
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         if((OrderSymbol() == sy || sy == "") && (mn < 0 || OrderMagicNumber() == mn))
            if(OrderType() == OP_BUY || OrderType() == OP_SELL)
               if(op < 0 || OrderType() == op)
                  if(pp < MathAbs(OrderOpenPrice() - Close[0]) / _Point)
                     return(false);
   return(true);
}
matro3 вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
Yura Vakulenko (14.04.2015)
Старый 14.04.2015, 13:39   #3762 (permalink)
Активный участник
 
Аватар для Yura Vakulenko
 
Регистрация: 04.12.2013
Адрес: Швейцария, Cham
Сообщений: 129
Репутация: 77
Yura Vakulenko
Сказал(а) спасибо: 62
Поблагодарили 76 раз(а) в 39 сообщениях
Поинты: 172
по-моему здесь явная ошибка в коде..

int i, k = OrdersTotal();

for(i = 0; i < k; i ++)

переменным i,k присваивается в один момент одно и тоже значение.. как же тогда переменная i может быть меньше k ?
и мне же нужно проверять расстояние только в том случае, если будет получен сигнал на покупку-продажу.. SigPF==1 или SigPF==2 и нужно сравнивать с ценой, которая будет как раз когда будет получен сигнал..

В любом случае, спасибо огромное.. сейчас буду пробовать!

по-моему вернее написать так..

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

и правильно ли использовать в сравнении OrderOpenPrice() - Close[0] именно Close[0] (та как если сигнал будет на покупку, он должен будет откртся по Ask, а если на продажу,)

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Музыка веков в звуках рояля - https://soundcloud.com/yura-vakulenko

Последний раз редактировалось Yura Vakulenko; 14.04.2015 в 14:22.
Yura Vakulenko вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 14.04.2015, 14:41   #3763 (permalink)
Почётный гражданин
 
Аватар для matro3
 
Регистрация: 18.07.2013
Сообщений: 349
Репутация: 344
matro3 matro3 matro3 matro3
Сказал(а) спасибо: 25
Поблагодарили 340 раз(а) в 143 сообщениях
Поинты: 160
Цитата:
по-моему вернее написать так..

int k = OrdersTotal();
for(int i = 0; i < k; i ++)
Будет верно и так и так. В моем случае:
int i, k = OrdersTotal(); - это объявление переменных для дальнейшего их использования. Просто k сразу присваивается значение.
При этом i не равен k.
Цитата:
и мне же нужно проверять расстояние только в том случае, если будет получен сигнал на покупку-продажу.. SigPF==1 или SigPF==2
Используете функцию когда это нужно, не понял проблемы...
Цитата:
и правильно ли использовать в сравнении OrderOpenPrice() - Close[0] именно Close[0] (та как если сигнал будет на покупку, он должен будет откртся по Ask, а если на продажу,)
Это уже как Вам надо, так и пишите.
matro3 вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
Yura Vakulenko (14.04.2015)
Старый 14.04.2015, 14:44   #3764 (permalink)
Активный участник
 
Аватар для Yura Vakulenko
 
Регистрация: 04.12.2013
Адрес: Швейцария, Cham
Сообщений: 129
Репутация: 77
Yura Vakulenko
Сказал(а) спасибо: 62
Поблагодарили 76 раз(а) в 39 сообщениях
Поинты: 172
ок, понял вас Матрос! большое вам спасибо! буду сейчас пробовать!

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Музыка веков в звуках рояля - https://soundcloud.com/yura-vakulenko
Yura Vakulenko вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 15.04.2015, 04:56   #3765 (permalink)
Активный участник
 
Аватар для vladradon
 
Регистрация: 12.02.2015
Сообщений: 104
Репутация: 37
vladradon
Сказал(а) спасибо: 23
Поблагодарили 37 раз(а) в 25 сообщениях
Поинты: 168
Сообщение от Yura Vakulenko Посмотреть сообщение
Это всего одна функция. Это не советник. просто все очень подробно расписал..

там нету ничего сложного в функции, просто не могу додуматся как написать.. может знатоки подскажут код..
Обратитесь ко мне в скайп - ник тот же. Помогу в режиме реального времени и Вы сами с моей помощью напишете код под Вашу стратегию. Там не обойтись одной функцией. Просто алгоритм мне нет смысла расписывать - он будет зависеть от других параметров, которые Вы используете.
vladradon вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 15.04.2015, 19:25   #3766 (permalink)
Интересующийся
 
Аватар для Palesandr
 
Регистрация: 19.03.2014
Сообщений: 9
Репутация: 4
Palesandr
Сказал(а) спасибо: 0
Поблагодарили 3 раз(а) в 3 сообщениях
Поинты: 5
всем привет
вопрос такой
Код:
ObjectSetString(0,"Btn3",OBJPROP_TEXT,"Большой текст");
есть кнопка с настройкой, т.е. с текстом на кнопке. размер кнопки меньше надписи. как перенести слово "текст " на новую строку?
Palesandr вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 16.04.2015, 18:10   #3767 (permalink)
Интересующийся
 
Аватар для andrey555888
 
Регистрация: 23.12.2009
Сообщений: 6
Репутация: -1
andrey555888
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Поинты: 2

По умолчанию как вставить в советик функцию мартингейл


Подскажите пожалуйста поэтапно как вставить в советник функцию мартингейл
andrey555888 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 16.04.2015, 19:30   #3768 (permalink)
Местный житель
 
Аватар для Cemen4yk1
 
Регистрация: 18.09.2014
Сообщений: 222
Репутация: 245
Cemen4yk1 - Cemen4yk1 - Cemen4yk1 -
Сказал(а) спасибо: 35
Поблагодарили 244 раз(а) в 101 сообщениях
Поинты: 205
Сообщение от andrey555888 Посмотреть сообщение
Подскажите пожалуйста поэтапно как вставить в советник функцию мартингейл
слишком широкий вопрос, мартингейл бывает очень разный, ну если элементарный вариант:
если цена ушла против последнего/верхнего/нижненго ордера на какоето кол пунктов то открываем усредняющий ордер в туже сторону объёмом предыдущего ордера * на экспоненту
сопутствующие функции (находим цену откр нужного ордера, находим его объём)
Cemen4yk1 на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 16.04.2015, 19:48   #3769 (permalink)
Интересующийся
 
Аватар для andrey555888
 
Регистрация: 23.12.2009
Сообщений: 6
Репутация: -1
andrey555888
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Поинты: 2
Спасибо за ответ.Я имел в виду как технически вставить код мартина в любой советник например этот

//+------------------------------------------------------------------+
int LossCount = 0;
double LotsArray[]={0.1,0.2,0.4,0.8,1.6,3.2};

...

double Lots()
{
double Lot = Lots;
int total = OrdersHistoryTotal();
for (int i = 0; i < total; i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MAGIC)
{
if (OrderProfit() > 0)
{
Lot=LotsArray[0];
LossCount = 0;
}
else
{
Lot=LotsArray[LossCount+1];
LossCount++;
}
}
}
return(Lot);
}
//+------------------------------------------------------------------+
andrey555888 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 17.04.2015, 04:45   #3770 (permalink)
Почётный гражданин
 
Аватар для matro3
 
Регистрация: 18.07.2013
Сообщений: 349
Репутация: 344
matro3 matro3 matro3 matro3
Сказал(а) спасибо: 25
Поблагодарили 340 раз(а) в 143 сообщениях
Поинты: 160
Эта функция перебирает ордера в истории на предмет убыточного закрытия.
Если это так, то с каждым новым убыточным ордером Lot берется из массива выше, индекс элемента массива будет равен числу последних подряд убыточных сделок.
Если сделка в профит, счетчик сбрасывается.
Перед тем как выставить ордер - вызываете эту функцию, она вернет размер нужного Вам лота.
Все как бы просто. Только, мне кажется, раз у Вас возник такой вопрос, то Вы не готовы к тому чтоб ковырять чужой код.
matro3 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 17.04.2015, 14:00   #3771 (permalink)
Местный знаток
За призовое место в конкурсе 

 
Аватар для ansol
 
Регистрация: 22.04.2010
Сообщений: 2,007
Репутация: 824
ansol - ansol - ansol - ansol - ansol - ansol - ansol -
Сказал(а) спасибо: 236
Поблагодарили 838 раз(а) в 552 сообщениях
Поинты: 1302
У меня возникла проблема.
Я пишу советника по типу "скальпер".
В тестере на котировках дукаскопи все ОК!
В реале, на новостях почему-то начинает открывать до хрена сделок с интервалом 2-3 пипса. В программе указано открывать на пол-ширины канала, т.е. пипсов 50-100.
Что нужно в программе прописать? Почему такая ерунда происходит?
ansol на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 17.04.2015, 18:52   #3772 (permalink)
Почётный гражданин
 
Аватар для matro3
 
Регистрация: 18.07.2013
Сообщений: 349
Репутация: 344
matro3 matro3 matro3 matro3
Сказал(а) спасибо: 25
Поблагодарили 340 раз(а) в 143 сообщениях
Поинты: 160
Сложно сказать. Может кусок кода поможет?
matro3 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 18.04.2015, 03:37   #3773 (permalink)
Местный знаток
За призовое место в конкурсе 

 
Аватар для ansol
 
Регистрация: 22.04.2010
Сообщений: 2,007
Репутация: 824
ansol - ansol - ansol - ansol - ansol - ansol - ansol -
Сказал(а) спасибо: 236
Поблагодарили 838 раз(а) в 552 сообщениях
Поинты: 1302
Ну, ХЗ, конечно
Вот
PHP код:
double iProfit Point*fabs(OrderProfit() + OrderCommission() + OrderSwap())/(OrderLots()*dTickVal);
                  
int iOrderTime int(TimeCurrent() - OrderOpenTime());
                     if(
OrderType() == OP_BUY && fOpenBuy1 && iProfit dTFATR/(dKTF*dKTZ dKTZ)) return(false); 
И на SELL аналогично.
Т.е. по моему разумению близко ордера не должны открываться.
Мало того! Я написал индикатор, который показывает ширину канала в пунктах и я вижу, что этих пунктов много, никак не 3-5. (это пятизнак, если что)
ansol на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 18.04.2015, 05:58   #3774 (permalink)
Почётный гражданин
 
Аватар для matro3
 
Регистрация: 18.07.2013
Сообщений: 349
Репутация: 344
matro3 matro3 matro3 matro3
Сказал(а) спасибо: 25
Поблагодарили 340 раз(а) в 143 сообщениях
Поинты: 160
iProfit, так понимамю, профит в пунктах.
Не понятно что делает функция fabs, зачем она? Что-то нормализует, видимо.
Point, видимо, равен _Point. Если все так, то он там не нужен.
Я бы вычислял профит в пунктах так:
position.profit_current = OrderProfit() + OrderCommission() + OrderSwap();
position.profit_point = position.profit_current / (symb.tickvalue * position.volume) и тут нет _Point.
Но может я ошибаюсь и все нормально.

А может в (iProfit < dTFATR/(dKTF*dKTZ + dKTZ)) знак < надо поменять на >.
Мне выражение справа тоже ни о чем не говорит.

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

Последний раз редактировалось matro3; 18.04.2015 в 06:01.
matro3 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 18.04.2015, 06:11   #3775 (permalink)
Местный знаток
За призовое место в конкурсе 

 
Аватар для ansol
 
Регистрация: 22.04.2010
Сообщений: 2,007
Репутация: 824
ansol - ansol - ansol - ansol - ansol - ansol - ansol -
Сказал(а) спасибо: 236
Поблагодарили 838 раз(а) в 552 сообщениях
Поинты: 1302
matro3
Понимаете, в чем дело - индикатор показывает geyrnjd 150, а ордера открываются с 2-3 пипса.
Тут дело такое - открываем в сторону тренда, а если что не так, то глушим убытки и открываемся в другую сторону.
В тестере все ОК, а в реале такая вот ерунда.
Ну, и конечно же, это безобразие на новостях.
Ну, дык! Скальпер же!
Просто, столько много сделок в неправильную сторону приносит убытки, ога!

И я не знаю, как это отследить. На новостях слишком все быстро летает
ansol на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 18.04.2015, 06:44   #3776 (permalink)
Почётный гражданин
 
Аватар для matro3
 
Регистрация: 18.07.2013
Сообщений: 349
Репутация: 344
matro3 matro3 matro3 matro3
Сказал(а) спасибо: 25
Поблагодарили 340 раз(а) в 143 сообщениях
Поинты: 160
Очень часто я думал что с моим кодом творится какая-то чертовщина, пока не находил свою ошибку. Робот есть робот. Раз он открывает, значит условие выполняется.

Давайте разберем этот код:
double iProfit = Point*fabs(OrderProfit() + OrderCommission() + OrderSwap())/(OrderLots()*dTickVal);
if(OrderType() == OP_BUY && fOpenBuy1 && iProfit < dTFATR/(dKTF*dKTZ + dKTZ)) return(false);
Полагаю он и отвечает за все это безобразие?..
Итак, наше условие: если IProfit (что вычисляет эта переменная?) меньше dTFATR/(dKTF*dKTZ + dKTZ)) (это ширина канала?), то сделке не бывать. Все верно?
Если последнее это ширина того самого канала, то он странно вычисляется. Может и нет, но выглядит так )....
Дайте пояснения к этим переменным.
matro3 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 18.04.2015, 06:52   #3777 (permalink)
Местный знаток
За призовое место в конкурсе 

 
Аватар для ansol
 
Регистрация: 22.04.2010
Сообщений: 2,007
Репутация: 824
ansol - ansol - ansol - ansol - ansol - ansol - ansol -
Сказал(а) спасибо: 236
Поблагодарили 838 раз(а) в 552 сообщениях
Поинты: 1302
matro3
Спасибо, что заинтересовались моей проблемой.

dTFATR - это сам канал и есть. Как можно догадаться по названию, он вычисляется на основе индикатора ATR.
А эти всякие dKTF и dKTZ - небольшие коэффициенты, примерно, около единицы, хотя на новостях могут быть и больше единицы, но не более двух.
ВотЪ.
Я проверял.
Ну, в принципе, логично, что на новостях надо лупить больше сделок.

Главное - в тестере-то все рулит!
Я, блин, миллионер уже по тестеру!

Пользуюсь TickStory - на этом форуме есть тема. Этот тикстори тащит котировки дукаскопи и вот на них все классно работает, а в реале - хрен
ansol на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 18.04.2015, 06:54   #3778 (permalink)
Местный знаток
За призовое место в конкурсе 

 
Аватар для ansol
 
Регистрация: 22.04.2010
Сообщений: 2,007
Репутация: 824
ansol - ansol - ansol - ansol - ansol - ansol - ansol -
Сказал(а) спасибо: 236
Поблагодарили 838 раз(а) в 552 сообщениях
Поинты: 1302
Я могу сюда выложить весь советник, но, боюсь, будут обсуждения не по теме - почему так криво и косо
ansol на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 18.04.2015, 07:07   #3779 (permalink)
Местный знаток
За призовое место в конкурсе 

 
Аватар для ansol
 
Регистрация: 22.04.2010
Сообщений: 2,007
Репутация: 824
ansol - ansol - ansol - ansol - ansol - ansol - ansol -
Сказал(а) спасибо: 236
Поблагодарили 838 раз(а) в 552 сообщениях
Поинты: 1302
Если не лень, то посмотри здесь пожалуйста ZigZag и советник
Это мой советник целиком и полностью
ansol на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 18.04.2015, 07:09   #3780 (permalink)
Почётный гражданин
 
Аватар для matro3
 
Регистрация: 18.07.2013
Сообщений: 349
Репутация: 344
matro3 matro3 matro3 matro3
Сказал(а) спасибо: 25
Поблагодарили 340 раз(а) в 143 сообщениях
Поинты: 160
А в обычном тестере работает также?
Ну и на новостях безбожно растет спрэд. Вероятно в этом дело?
Я не уверен что могу Вам помочь )
Ищите, какое-то вычисление на новостях дает не тот результат что ожидается.
А значит спред виноват. Выставьте в тестере спрэд побольше и посмотрите, что будет.

Не увидел сообщение выше. Сейчас посмотрю.
matro3 вне форума   Ответить с цитированиемОтветить с цитированием  
Ответ

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


Опции темы

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

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



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


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