[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 910
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Виктор, посмотрите личку, пожалуйста.
Видел
OrderSend() срабатывает при каждом тике (я так понимаю). Чтобы снять проблему об'являеш переменную перед функцией start, например int Н=0.
Дальше код:
..........
if ( Н==0)
{
OrderSend(бла-бла-бла);
}
H=1;
И не надо алгебры. А OrdersTotal() для ограничения лучше не использовать.
это то понятно,у меня все работает,я имею в виду чтобы у меня открывался 1 ордер,и чтобы при следующем тике не открывался
второй ордер,второй надо только когда первый закроется
если я не ошибаюсь, то наверно так?
int Н=0;
int F=OrdersTotal();
..........
if(F<1)
{
if ( Н==0)
{
OrderSend(бла-бла-бла);
}
H=1;}
если я не ошибаюсь, то наверно так?
int Н=0;
int F=OrdersTotal();
..........
if(F<1)
{
if ( Н==0)
{
OrderSend(бла-бла-бла);
}
H=1;}
это то понятно,у меня все работает,я имею в виду чтобы у меня открывался 1 ордер,и чтобы при следующем тике не открывался
второй ордер,второй надо только когда первый закроется
Добрый день всем. В написании советников я не силен, пытался изучить это дело, но только начал и довольно тяжело для меня. Хочу написать советник, который бы открывал сделки при пересечении цены скользящей средней, а закрывал их при обратном пересечении, либо по стоп лоссу либо по трейлинг стопу. Нашел пример такого советника, но там нет ни трейлингстопа ни стоп лосса, а сделки открываются и закрываются просто при пересечении. Самому не хватает знаний. Помогите плиз кто-нибудь, где нужно встапить трейлингстоп и стоплосс и как это правильно сделать, чтобы они работали:
#property copyright "Jake Sunders"
#property link "feloq@mail.ru"
#define STATE_SQUARE 0
#define STATE_LONG 1
#define STATE_SHORT 2
//---- input parameters
extern int MAPeriod=26;
extern double LotsNumber=1.0;
extern double TrailingStop = 50;
extern double StopLoss= 50;
//---- глобальные переменные
int CurrentState;
int MyOrderTicket;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
if (iMA(NULL, 0, MAPeriod, 0, MODE_SMA, PRICE_CLOSE, 0) > Close[0])
CurrentState = STATE_SHORT;
else CurrentState = STATE_LONG;
MyOrderTicket = 0;
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
int err;
double MA;
MA = iMA(NULL, 0, MAPeriod, 0, MODE_EMA, PRICE_CLOSE, 0);
if ( CurrentState == STATE_LONG)
{
if (MA > Close[1]) //скользящая средняя выше цены закрытия
{
CurrentState = STATE_SHORT;
//переворачиваемся в продажу
//---закрыть позицию, если была открыта
if ( MyOrderTicket != 0)
{
if (!OrderClose(MyOrderTicket, LotsNumber, Bid, 3, CLR_NONE))
{
err = GetLastError();
Print("Ошибка при закрытии позиции: ", err);
return(0);
}
MyOrderTicket = 0;
}
RefreshRates();
//--- длинная позиция была закрыта успешно
//--- теперь откроем позицию в продажу
//--- проверим на наличие свободных средств
MyOrderTicket = OrderSend(Symbol(), OP_SELL, LotsNumber, Bid, 3, 0, 0,
NULL, 0, 0, CLR_NONE);
if (MyOrderTicket<0)
{
err = GetLastError();
Print("Ошибка при открытии позиции: ", err);
MyOrderTicket = 0;
}
}
}
else
{
if (MA < Close[1]) //скользящая средняя ниже цены закрытия
{
CurrentState = STATE_LONG;
//переворачиваемся в покупку
//---закрыть позицию, если была открыта
if ( MyOrderTicket != 0)
{
if (!OrderClose(MyOrderTicket, LotsNumber, Ask, 3, CLR_NONE))
{
err = GetLastError();
Print("Ошибка при закрытии позиции: ", err);
return(0);
}
MyOrderTicket = 0;
}
RefreshRates();
//--- короткая позиция была закрыта успешно
//--- теперь откроем позицию в покупку
//--- проверим на наличие свободных средств
MyOrderTicket = OrderSend(Symbol(), OP_BUY, LotsNumber, Ask, 3, 0, 0,
NULL, 0, 0, CLR_NONE);
if (MyOrderTicket<0)
{
err = GetLastError();
Print("Ошибка при открытии позиции: ", err);
MyOrderTicket = 0;
}
}
}
//----
return(0);
}
Люди, подскажите пожалуйста! Как сделать так, чтобы позиция открывалась и закрывалась по истечению какой-либо свечки или свечек? То есть открывается при открытии новой свечки, закрывается
при закрытии этой же свечки или любой другой заданной? и как для какого-либо условия открытия позиции брать значения индикатора при закрытии свечки?
у меня ордера на покупку и продажу открывают по одной цене чуть ли не по 50-100 позиций,
как сделать чтобы у меня открывался только один ордер,если я не ошибаюсь то OrdersTotal()
и если это так, то как его использовать? и где его ставить? а то я чувствую без этой функции целую алгебру надо вбивать
Не правильные условия для совершения сделок, см. пример для двух МА.
Добрый день всем. В написании советников я не силен, пытался изучить это дело, но только начал и довольно тяжело для меня. Хочу написать советник, который бы открывал сделки при пересечении цены скользящей средней, а закрывал их при обратном пересечении, либо по стоп лоссу либо по трейлинг стопу. Нашел пример такого советника, но там нет ни трейлингстопа ни стоп лосса, а сделки открываются и закрываются просто при пересечении. Самому не хватает знаний. Помогите плиз кто-нибудь, где нужно встапить трейлингстоп и стоплосс и как это правильно сделать, чтобы они работали:
#property copyright "Jake Sunders"
#property link "feloq@mail.ru"
#define STATE_SQUARE 0
#define STATE_LONG 1
#define STATE_SHORT 2
//---- input parameters
extern int MAPeriod=26;
extern double LotsNumber=1.0;
extern double TrailingStop = 50;
extern double StopLoss= 50;
//---- глобальные переменные
int CurrentState;
int MyOrderTicket;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
if (iMA(NULL, 0, MAPeriod, 0, MODE_SMA, PRICE_CLOSE, 0) > Close[0])
CurrentState = STATE_SHORT;
else CurrentState = STATE_LONG;
MyOrderTicket = 0;
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
int err;
double MA;
MA = iMA(NULL, 0, MAPeriod, 0, MODE_EMA, PRICE_CLOSE, 0);
if ( CurrentState == STATE_LONG)
{
if (MA > Close[1]) //скользящая средняя выше цены закрытия
{
CurrentState = STATE_SHORT;
//переворачиваемся в продажу
//---закрыть позицию, если была открыта
if ( MyOrderTicket != 0)
{
if (!OrderClose(MyOrderTicket, LotsNumber, Bid, 3, CLR_NONE))
{
err = GetLastError();
Print("Ошибка при закрытии позиции: ", err);
return(0);
}
MyOrderTicket = 0;
}
RefreshRates();
//--- длинная позиция была закрыта успешно
//--- теперь откроем позицию в продажу
//--- проверим на наличие свободных средств
MyOrderTicket = OrderSend(Symbol(), OP_SELL, LotsNumber, Bid, 3, 0, 0,
NULL, 0, 0, CLR_NONE);
if (MyOrderTicket<0)
{
err = GetLastError();
Print("Ошибка при открытии позиции: ", err);
MyOrderTicket = 0;
}
}
}
else
{
if (MA < Close[1]) //скользящая средняя ниже цены закрытия
{
CurrentState = STATE_LONG;
//переворачиваемся в покупку
//---закрыть позицию, если была открыта
if ( MyOrderTicket != 0)
{
if (!OrderClose(MyOrderTicket, LotsNumber, Ask, 3, CLR_NONE))
{
err = GetLastError();
Print("Ошибка при закрытии позиции: ", err);
return(0);
}
MyOrderTicket = 0;
}
RefreshRates();
//--- короткая позиция была закрыта успешно
//--- теперь откроем позицию в покупку
//--- проверим на наличие свободных средств
MyOrderTicket = OrderSend(Symbol(), OP_BUY, LotsNumber, Ask, 3, 0, 0,
NULL, 0, 0, CLR_NONE);
if (MyOrderTicket<0)
{
err = GetLastError();
Print("Ошибка при открытии позиции: ", err);
MyOrderTicket = 0;
}
}
}
//----
return(0);
}
Посмотрите этот пример