Помощь в кодировании - страница 469

 

Здравствуйте трейдер.

Может ли кто-нибудь помочь мне и знает, какие индикаторы находятся в этих двух файлах .ex4?!

С наилучшими пожеланиями, oink!

Файлы:
 
oink!:
Здравствуйте трейдер.

Может ли кто-нибудь помочь мне и знает, какие индикаторы находятся в этих двух файлах .ex4?!

С наилучшими пожеланиями, oink!

Алерт сигналы это простой зигзаг сделанный для показа стрелок :

Файлы:
zz.gif  76 kb
 

Thanksmladen, я знаю ваше имя из около 10000 Индикаторов! ;-)

Потом я погуглил на предмет индикатора зигзаг+стрелки.

Другой не определен?

С наилучшими пожеланиями, oink!

 
oink!:
Thanksmladen, я знаю ваше имя из примерно 10000 Индикаторов! ;-)

Затем я нахожу в Гугле индикатор зигзаг+стрелки.

Другой не определен?

С наилучшими пожеланиями, oink!

Честно говоря, я не смог распознать другой. Извините

 

Здравствуйте,

Я не понимаю, почему эта еа не работает, компиляция в порядке, ничего в журнале, ни в экспертной вкладке, но нет ни одной сделки.

Заранее спасибо.

Jo

extern int magicNum=200;

extern double TakeProfit = 50;

extern double Lots = 0.01;

extern double TrailingStop = 30;

//extern double MACDOpenLevel=3;

//extern double MACDCloseLevel=2;

extern double MATrendPeriod=5;

int start()

{

double MaCurrent,MaPrevious,MavPrevious;

double close=iClose(Symbol(),0,0);

double vclose=iClose(Symbol(),0,1);

double vvclose=iClose(Symbol(),0,2);

// double MacdCurrent, MacdPrevious, SignalCurrent;

// double SignalPrevious, MaCurrent, MaPrevious;

// double RSIj,RSIv;

int cnt, ticket, total;

// проверка исходных данных

// важно убедиться в том, что эксперт работает с нормальным

// графиком и пользователь не допустил ошибок при установке внешних

// переменных (Lots, StopLoss, TakeProfit,

// TrailingStop), в нашем случае мы проверяем TakeProfit

// на графике с количеством баров менее 100

if(Bars<100)

{

Print("баров меньше 100");

return(0);

}

if(TakeProfit<10)

{

Print("TakeProfit меньше 10");

return(0); // проверяем TakeProfit

}

// для упрощения кодирования и ускорения доступа

// данные помещаются во внутренние переменные

// MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);

// MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);

// SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);

// SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);

MaCurrent=iMA(NULL,0,MATrendPeriod,0,MODE_SMA,PRICE_CLOSE,0);

MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_SMA,PRICE_CLOSE,1);

MavPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_SMA,PRICE_CLOSE,2);

double PlusHaut =High;

double PlusBas =Low;

double TiersHaut =PlusBas +((PlusHaut-PlusBas)*0.66);

double TiersBas =PlusBas +((PlusHaut-PlusBas)*0.33);

// RSIj= iRSI(NULL,0,9,PRICE_CLOSE,0);

// RSIv= iRSI(NULL,0,9,PRICE_CLOSE,1);

total=OrdersTotal();

if(total<1)

{ // открытых ордеров не обнаружено

if(AccountFreeMargin()<(1000*Lots))

{

Print("У нас нет денег. Свободная маржа = ", AccountFreeMargin());

return(0);

}

// проверка возможности длинной позиции (BUY)

если

// (RSIv30)

( MaCurrent >MaPrevious)

// && (MaPreviousvclose || vclose>vvclose))

// (MacdCurrentSignalCurrent && MacdPrevious<SignalPrevious &&.

// MathAbs(MacdCurrent)>(MACDOpenLevel*Point) && MaCurrent>MaPrevious)

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point, "MA",magicNum,0,Green);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("Открыт ордер BUY : ",OrderOpenPrice());

}

else Print("Ошибка при открытии ордера BUY : ",GetLastError());

return(0);

}

// проверка возможности короткой позиции (SELL)

// if (RSIv>70 && RSIj<70)

if (MaCurrent <MaPrevious)

// && (MaPrevious>MavPrevious) && (close<vclose || vclose<vvclose))

// (MacdCurrent>0 && MacdCurrentSignalPrevious &&.

// MacdCurrent>(MACDOpenLevel*Point) && MaCurrent<MaPrevious)

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point, "MA",magicNum,0,Red);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print(" Открытордер SELL: ",OrderOpenPrice());

}

else Print("Ошибка при открытии ордера SELL : ",GetLastError());

return(0);

}

return(0);

}

// важно правильно войти в рынок,

// но еще важнее правильно выйти из него...

for(cnt=0;cnt<total;cnt++)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if(OrderType()<=OP_SELL && // проверяем наличие открытой позиции

OrderSymbol()==Symbol()) // проверка наличия символа

{

if(OrderType()==OP_BUY) // открыта длинная позиция

{

// должна ли она быть закрыта?

// if(MacdCurrent>0 && MacdCurrentSignalPrevious &&.

// MacdCurrent>(MACDCloseLevel*Point))

// if (RSIv>70 && RSIj<70)

if (MaCurrent <MaPrevious)

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // закрываем позицию

return(0); // выход

}

// проверка наличия трейлинг-стопа

if(TrailingStop>0)

{

if(Bid-OrderOpenPrice()>Point*TrailingStop)

{

if(OrderStopLoss()<Bid-Point*TrailingStop)

{

OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);

return(0);

}

}

}

}

else // переходим в короткую позицию

{

// должна ли она быть закрыта?

// if(MacdCurrentSignalCurrent &&.

// MacdPrevious(MACDCloseLevel*Point))

if

// (RSIv30)

( MaCurrent >MaPrevious)

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // закрытие позиции

return(0); // выход

}

// проверка наличия трейлинг-стопа

if(TrailingStop>0)

{

if((OrderOpenPrice()-Ask)>(Point*TrailingStop))

{

if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))

{

OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);

return(0);

}

}

}

}

}

}

return(0);

}

// конец.

 
Jovager:
Здравствуйте,

Я не понимаю, почему эта еа не работает, компиляция в порядке, ничего в журнале, ни в экспертной вкладке, но нет ни одной сделки.

Заранее спасибо.

Jo

extern int magicNum=200;

extern double TakeProfit = 50;

extern double Lots = 0.01;

extern double TrailingStop = 30;

//extern double MACDOpenLevel=3;

//extern double MACDCloseLevel=2;

extern double MATrendPeriod=5;

int start()

{

double MaCurrent,MaPrevious,MavPrevious;

double close=iClose(Symbol(),0,0);

double vclose=iClose(Symbol(),0,1);

double vvclose=iClose(Symbol(),0,2);

// double MacdCurrent, MacdPrevious, SignalCurrent;

// double SignalPrevious, MaCurrent, MaPrevious;

// double RSIj,RSIv;

int cnt, ticket, total;

// проверка исходных данных

// важно убедиться в том, что эксперт работает с нормальным

// графиком и пользователь не допустил ошибок при установке внешних

// переменных (Lots, StopLoss, TakeProfit,

// TrailingStop), в нашем случае мы проверяем TakeProfit

// на графике с количеством баров менее 100

if(Bars<100)

{

Print("баров меньше 100");

return(0);

}

if(TakeProfit<10)

{

Print("TakeProfit меньше 10");

return(0); // проверяем TakeProfit

}

// для упрощения кодирования и ускорения доступа

// данные помещаются во внутренние переменные

// MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);

// MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);

// SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);

// SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);

MaCurrent=iMA(NULL,0,MATrendPeriod,0,MODE_SMA,PRICE_CLOSE,0);

MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_SMA,PRICE_CLOSE,1);

MavPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_SMA,PRICE_CLOSE,2);

double PlusHaut =High;

double PlusBas =Low;

double TiersHaut =PlusBas +((PlusHaut-PlusBas)*0.66);

double TiersBas =PlusBas +((PlusHaut-PlusBas)*0.33);

// RSIj= iRSI(NULL,0,9,PRICE_CLOSE,0);

// RSIv= iRSI(NULL,0,9,PRICE_CLOSE,1);

total=OrdersTotal();

if(total<1)

{ // открытых ордеров не обнаружено

if(AccountFreeMargin()<(1000*Lots))

{

Print("У нас нет денег. Свободная маржа = ", AccountFreeMargin());

return(0);

}

// проверка возможности длинной позиции (BUY)

если

// (RSIv30)

( MaCurrent >MaPrevious)

// && (MaPreviousvclose || vclose>vvclose))

// (MacdCurrentSignalCurrent && MacdPrevious<SignalPrevious &&.

// MathAbs(MacdCurrent)>(MACDOpenLevel*Point) && MaCurrent>MaPrevious)

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point, "MA",magicNum,0,Green);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("Открыт ордер BUY : ",OrderOpenPrice());

}

else Print("Ошибка при открытии ордера BUY : ",GetLastError());

return(0);

}

// проверка возможности короткой позиции (SELL)

// if (RSIv>70 && RSIj<70)

if (MaCurrent <MaPrevious)

// && (MaPrevious>MavPrevious) && (close<vclose || vclose<vvclose))

// (MacdCurrent>0 && MacdCurrentSignalPrevious &&.

// MacdCurrent>(MACDOpenLevel*Point) && MaCurrent<MaPrevious)

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point, "MA",magicNum,0,Red);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("Открыт ордер SELL : ",OrderOpenPrice());

}

else Print("Ошибка при открытии ордера SELL : ",GetLastError());

return(0);

}

return(0);

}

// важно правильно войти в рынок,

// но еще важнее правильно выйти из него...

for(cnt=0;cnt<total;cnt++)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if(OrderType()<=OP_SELL && // проверяем наличие открытой позиции

OrderSymbol()==Symbol()) // проверка наличия символа

{

if(OrderType()==OP_BUY) // открыта длинная позиция

{

// должна ли она быть закрыта?

// if(MacdCurrent>0 && MacdCurrentSignalPrevious &&.

// MacdCurrent>(MACDCloseLevel*Point))

// if (RSIv>70 && RSIj<70)

if (MaCurrent <MaPrevious)

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // закрываем позицию

return(0); // выход

}

// проверка наличия трейлинг-стопа

if(TrailingStop>0)

{

if(Bid-OrderOpenPrice()>Point*TrailingStop)

{

if(OrderStopLoss()<Bid-Point*TrailingStop)

{

OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);

return(0);

}

}

}

}

else // переходим в короткую позицию

{

// должна ли она быть закрыта?

// if(MacdCurrentSignalCurrent &&.

// MacdPrevious(MACDCloseLevel*Point))

if

// (RSIv30)

( MaCurrent >MaPrevious)

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // закрытие позиции

return(0); // выход

}

// проверка наличия трейлинг-стопа

if(TrailingStop>0)

{

if((OrderOpenPrice()-Ask)>(Point*TrailingStop))

{

if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))

{

OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);

return(0);

}

}

}

}

}

}

return(0);

}

// конец.

Это работает в моих тестах:

Файлы:
jo.gif  90 kb
 

Здравствуйте, mladen,

Я хочу сделать частичную продажу моего profitOrder с тем же значением, что и моя переменная "LossValue".

Я попытался рассчитать размер лота следующим образом:

-Считать фактическую прибыль из profitOrder.

-Рассчитать прибыль на лот (ProfitPerLotstep)

-Вычислить LossValue/ProfitPerLotstep и округлить результат лота в большую сторону.

-Но если я продам этот лот, то значение прибыли будет слишком маленьким (я думаю из-за спреда).

Какой способ расчета правильный?

 

Вот дополнительный вопрос.

Если я делаю частичное закрытие, то остальная часть позиции автоматически закрывается брокером. Раньше я давал Позиции комментарий, чтобы отличить эту Позицию. Как я могу распознать это сейчас?

 
sunshineh:
Вот дополнительный вопрос. Если я делаю частичное закрытие, то остальная часть позиции автоматически закрывается брокером. Раньше я давал Позиции комментарий, чтобы отличить эту Позицию. Как я могу распознать ее теперь?

sunshineh

Вы ничего не можете сделать.

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

 

Спасибо, Младен! Есть ли у вас решение для моего предыдущего сообщения с расчетом от размера лота в соответствии с определенным значением, например, 100 EUR?