Здравствуйте! Подскажите как в программе приостановить торговлю, при достижении профита до следующего дня?
Изменено 15 ноября, 2017 пользователем alex202
От xbms, 13 апреля, 2013 в Уголок Программиста
Здравствуйте! Подскажите как в программе приостановить торговлю, при достижении профита до следующего дня?
Изменено 15 ноября, 2017 пользователем alex202
Здравствуйте. Возник вопрос с советником мартингейлом. По урокам написал советник, точнее сваял его из кусочков чужих кодов.
Блок мартина из вашего урока. В тестере торгует нормально. Но вопрос в увеличении лота - при коэффициенте 1.5 или 2 всё нормально умножает, но как только ставлю коэффициент ниже 1.5, то перестаёт увеличивать лоты и торгует только минимальным лотом 0.01. Подскажите, как привести это в порядок.
Спасибо! Буду пробовать.
В ходе работы понадобилось некое подобие событий, для начала, просто сигнал о том что цена дошла до опеределенного уровня. В результате получился приведенный ниже код, который предлагаю к обсуждению- возможно мной не учтены какие то особенности... :)
//+------------------------------------------------------------------+
//| Event.mqh |
//| Copyright 2014, MetaQuotes Software Corp. |
//| http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link "http://www.mql5.com"
#property strict
#include
//+------------------------------------------------------------------+
//| *************************************************************** |
//| CEvent |
//+------------------------------------------------------------------+
enum EEventState {
esSuspended,
esActive,
esWaitConditions
};
//+------------------------------------------------------------------+
class CEvent : public CObject
{
private:
protected:
EEventState m_state;
bool m_signal;
datetime m_signal_time;
datetime m_bar_time;
virtual void Set() { m_signal=true; m_signal_time=TimeCurrent(); m_bar_time=Time[0]; }
public:
CEvent(const EEventState state=esSuspended) :
m_state(state),
m_signal(false),
m_signal_time(0),
m_bar_time(0) {}
~CEvent() {}
virtual void Refresh(void) {}
EEventState State(void) const { return(m_state); }
virtual void State(const EEventState state) { if (m_state != state) return; m_state=state; Reset(); }
bool Signal(void) const { return(m_state == esActive && m_signal); }
virtual void Reset(void) { m_signal=false; m_signal_time=0; m_bar_time=0; }
datetime SignalTime(void) const { return(m_state == esActive ? m_signal_time : 0); }
datetime BarTime(void) const { return(m_state == esActive ? m_bar_time : 0); }
};
//+------------------------------------------------------------------+
enum EOnPriceMode {
opmCheckAsk,
opmCheckBid
};
//+------------------------------------------------------------------+
class COnPrice : public CEvent
{
private:
double m_last_ask;
double m_last_bid;
protected:
double m_price;
double m_deviation;
EOnPriceMode m_mode;
double m_pt_scale;
public:
COnPrice(const EEventState state=esSuspended) :
CEvent(state),
m_last_ask(Ask),
m_last_bid(Bid),
m_price(0),
m_deviation(0),
m_mode(opmCheckBid),
m_pt_scale(((Digits == 5) || (Digits == 3)) ? 10 : 1)
{}
~COnPrice() {}
virtual void Refresh(void);
double Price(void) const { return(m_price); }
virtual void Price(const double price) { m_price=price; Reset(); }
double Deviation(void) const { return(m_deviation); }
virtual void Deviation(const double deviation) { m_deviation=deviation; Reset(); }
EOnPriceMode Mode(void) const { return(m_mode); }
virtual void Mode(const EOnPriceMode mode) { m_mode=mode; Reset(); }
};
//+------------------------------------------------------------------+
void COnPrice::Refresh(void)
{
do
{
if (m_state != esActive)
break;;
double old_price=m_mode == opmCheckAsk ? m_last_ask : m_last_bid;
double new_price=m_mode == opmCheckAsk ? Ask : Bid;
if (MathAbs(m_price-new_price) {
Set();
break;
}
if (((new_price ((new_price >= m_price) && (m_price >= old_price)))
{
if (MathAbs(new_price-m_price) {
Set();
break;
}
}
Reset();
}
while (false);
m_last_ask=Ask;
m_last_bid=Bid;
CEvent::Refresh();
}
//+------------------------------------------------------------------+
//| / CEvent / |
//| *************************************************************** |
//+------------------------------------------------------------------+
Здравствуйте! Подскажите как считать показание цены стрелки индикатора с окна графика (буфер цену не возвращает)? Например в этом индикаторе. Можно даже ссылку, где посмотреть решение.
Изменено 20 ноября, 2017 пользователем alex202
Здравствуйте трейдеры. У меня вопрос касательно языка MQL4 для бинарных опционов. Суть заключается в том что-бы написать функцию мартингейла, но, отображая значение int вместо doble (Т.к. торговля идет в валюте депозита, а не в лоте). Но, функция изложенная ниже попросту не хочет работать, возможны, вы видите причину(
//+------------------------------------------------------------------+
extern int Lots= 1;
extern int LotExponent = 2;
//в настройках советника добавляем:
input bool Martin=true; // использовать увеличения лота если были убытки
input int MaxMartin=4; // макс. кол-во применения Мартингейл
int Lots()
{
int ret=Lots; // размер лота по-умолчанию
if (Martin) // если включен мартингейл
{
// инициализация переменных
int trade = OrdersHistoryTotal()-1; // количество сделок в истории
int i=0; // счетчик перебора истории сделок
int n=0; // количество непрерывных убыточных сделок
// рассматриваем исторические сделки от последней к первой
for (i=trade; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && OrderSymbol() == Symbol() && OrderMagicNumber()==Magic && (OrderType() == OP_BUY || OrderType()==OP_SELL))
{
// считаем кол-во непрерывных убытков
if (OrderProfit()+OrderSwap()+OrderCommission() else break; // сделка в "+" или в ноль - выходим
}
}
// если были убытки и количество случаев не больше MaxMartin - пересчитать размер лота
if (n>0 && n {
ret=(Lots*MathPow(LotExponent, n));
}
}
return(ret);
}
//+------------------------------------------------------------------+
Попробуй:
if (n>=0 && n {
ret=(int)(Lots*MathPow(LotExponent, n));
}
Не помогло
//+------------------------------------------------------------------+
extern int Lots= 1;
extern int LotExponent = 2;
//в настройках советника добавляем:
input bool Martin=true; // использовать увеличения лота если были убытки
input int MaxMartin=4; // макс. кол-во применения Мартингейл
int Lots()
{
int ret=Lots; // размер лота по-умолчанию
if (Martin) // если включен мартингейл
{
// инициализация переменных
int trade = OrdersHistoryTotal()-1; // количество сделок в истории
int i=0; // счетчик перебора истории сделок
int n=0; // количество непрерывных убыточных сделок
// рассматриваем исторические сделки от последней к первой
for (i=trade; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && OrderSymbol() == Symbol() && OrderMagicNumber()==Magic && (OrderType() == OP_BUY || OrderType()==OP_SELL))
{
// считаем кол-во непрерывных убытков
if (OrderProfit() else break; // сделка в "+" или в ноль - выходим
}
}
// если были убытки и количество случаев не больше MaxMartin - пересчитать размер лота
if (n>=0 && n {
ret=(int)(Lots*MathPow(LotExponent, n));
}
}
return(ret);
}
//+------------------------------------------------------------------+
{
ret=(int)(Lots*MathPow(LotExponent, n));
}
Т.е. код должен выглядеть следующим образом?
if (n>=0 && n {
ret=(int)(Lots*LotExponent);
}
Изменено 22 ноября, 2017 пользователем Александр_F
Ребят открыл счет в альпари , и в терминале , при сделках стали выводиться комментарии типо таких 1[0] . Советники ни какие не висят , а счет стал комментироваться , что за ерунда , не отслеживает ли или не копирует ли сделки брокер ? хрень какая то ...
Ребят открыл счет в альпари , и в терминале , при сделках стали выводиться комментарии типо таких 1[0] . Советники ни какие не висят , а счет стал комментироваться , что за ерунда , не отслеживает ли или не копирует ли сделки брокер ? хрень какая то ...
Няшный альпари таким образом пишет тебе проскальзывания в комент. Я туда еще и размер спреда добавляю. Жаль редактировать нельзя.
Ребят открыл счет в альпари , и в терминале , при сделках стали выводиться комментарии типо таких 1[0] . Советники ни какие не висят , а счет стал комментироваться , что за ерунда , не отслеживает ли или не копирует ли сделки брокер ? хрень какая то ...
Няшный альпари таким образом пишет тебе проскальзывания в комент. Я туда еще и размер спреда добавляю. Жаль редактировать нельзя.
Не знаю что именно пишеться, но левые комменты вообще не должны попадать в общий просмотр, т.к это режим дебага
Удалено
Изменено 23 ноября, 2017 пользователем alex202
Функция, делающая активным последний закрытый ордер:
void activ_last_ord()
{
for ( int i = OrdersHistoryTotal()-1; i >= 0; i-- )
{
if ( OrderSelect( i, SELECT_BY_POS, MODE_HISTORY )
&& OrderSymbol() == _Symbol && OrderMagicNumber() == Magic ) break;
}
}
Далее можно анализировать параметры ордера, типа:
if ( OrderProfit()
Всем привет! Просмотрел первых пять уроков по программированию и я понял что ничего не понял :). Все разжевывается хорошо, но открываю я код советника и ступор. Хрен знает с чего начинать и чем заканчивать, а мысль автоматизировать работу все свербит и свербит. Знаю как должен советник работать, а как это прописать не знаю. Хотел скопировать из уроков, так индюки разные и задачи разные.
Короче ребята помогите никак не соображу я что впихнуть и как впихнуть в прикрепленный советник (советник составлял естественно не сам).
Советник основан на индикаторе Parabolic SAR, работает для моей ТС идеально за исключением отсутствия ММ и взятия профита.
Сперва хотел спросить по профиту. Профит хотел бы чтоб устанавливался не ТР, а просто советник закрывал бы сделку при достижении определенной суммы. Расстояние, которое должна пройти цена для закрытия сделки в плюс должно равняться расстоянию от открытия ордера (бай или сел) до первой перескочившей точки параболика (см. приложение).
Надеюсь на помощь. Если кого заинтересовало готов вместе поработать чтоб довести робота до ума по моей ТС. В благодарность за проделанную работу робот заработает очень много денег :))
Добрый день! Хотел попробовать написать советник по дивергенциям по OsMa. И даже че-то сварганил по урокам на сайте. Минимум, максимум вроде нашел на истории, только вот свечку которая на минимуме или максимуме найти не могу. Объясните новичку пжл.
int j = 0;
int m = 0;
int k = 0;
ArrayResize(Hyst, 300);
ArrayInitialize(Hyst, 0);
ArrayResize(NewHyst, 300);
ArrayInitialize(NewHyst, 0);
ArrayResize(NewHystMax, 300);
ArrayInitialize(NewHystMax, 0);
for (int i = 0; i {
double Osma = iOsMA(NULL, 0, 24, 26, 9, PRICE_CLOSE, i);
Hyst[j] = Osma;
j++;
}
for(int i=0; i {
if ( Hyst[ i ] != 0) m++;
}
ArrayResize(Hyst, m);
for(int i=0; i {
NewHyst[k] = Hyst[ArrayMinimum(Hyst, WHOLE_ARRAY, 0)];
k++;
}
m = 0;
for(int i=0; i {
if(NewHyst != 0) m++;
}
ArrayResize(NewHyst, m);
for(int i=0; i {
Print("Osma Minimum " + DoubleToStr(NewHyst [ i ], 7));
}
Изменено 29 ноября, 2017 пользователем 0ll
Ребят открыл счет в альпари , и в терминале , при сделках стали выводиться комментарии типо таких 1[0] . Советники ни какие не висят , а счет стал комментироваться , что за ерунда , не отслеживает ли или не копирует ли сделки брокер ? хрень какая то ...
Няшный альпари таким образом пишет тебе проскальзывания в комент. Я туда еще и размер спреда добавляю. Жаль редактировать нельзя.
Не знаю что именно пишеться, но левые комменты вообще не должны попадать в общий просмотр, т.к это режим дебага
Да , звонил в альпари , проскальзывание комментируется , исправляется путем убирания галочки в настройках счета . Имхо -лишняя муть . Еще сделали кучу настроек по проскальзыванию , активировать объем дробно или целиком , вообщем лишний засер мозга .
Сожалею, но здесь ни кто свечку не найдёт...Добрый день! Хотел попробовать написать советник по дивергенциям по OsMa. И даже че-то сварганил по урокам на сайте. Минимум, максимум вроде нашел на истории, только вот свечку которая на минимуме или максимуме найти не могу. Объясните новичку пжл.
Добрый вечер коллеги трейдеры!
Подскажите пожалуйста - можно ли написать индикатор отображения вот этого параметра

Если параметр текстовый, то советник читает сайт с заданной периодичностью, находит параметр и отображает.
Если графический, то сложнее, но тоже возможно.
Господа программисты, при определенном размере массива если он полностью заполнен и поступает новое значение - выдаст ошибку или перепишет самое старое?
Для публикации сообщений создайте учётную запись или авторизуйтесь
Перейти к списку тем