Как кодировать? - страница 167

 
 

Все еще пытаюсь добавить звуковое оповещение в этот индикатор...... Может ли кто-нибудь проверить код для меня, так как он не работает?

//+------------------------------------------------------------------+

//|

//|

//+------------------------------------------------------------------+

#property copyright "niva"

#property indicator_chart_window

#property indicator_buffers 2

#property indicator_color1 White

#property indicator_color2 Red

extern bool Email_Enabled = false;

extern bool Alert_Enabled = true;

//---- input parameters

int CountBars=10000;

//---- buffers

double uptrend[];

double downtrend[];

bool AlertSent,EmailSent;

//+------------------------------------------------------------------+

//| Custom indicator initialization function |

//+------------------------------------------------------------------+

int init()

{

//---- indicator line

IndicatorBuffers(2);

SetIndexStyle(0,DRAW_ARROW);

SetIndexArrow(0,217);

SetIndexStyle(1,DRAW_ARROW);

SetIndexArrow(1,218);

SetIndexBuffer(0,val1);

SetIndexBuffer(1,val2);

//----

return(0);

}

//+------------------------------------------------------------------+

//| AltrTrend_Signal_v2_2 |

//+------------------------------------------------------------------+

int start()

{

if (CountBars>=Bars) CountBars=Bars;

int i,shift,counted_bars=IndicatorCounted();

int uptrend, downtrend;

for (shift = CountBars; shift>=0; shift--)

{

if(High[shift-1]>High[shift]&&Low[shift-1]>Low[shift]&&uptrend!=3){

uptrend = uptrend+1;

downtrend=0;

}else if(High[shift-1]<High[shift]&&Low[shift-1]<Low[shift]&&downtrend!=3){

downtrend=downtrend+1;

uptrend=0;

}

else{

uptrend=0;

downtrend=0;

}

if (uptrend==3)

{

val1[shift]=Low[shift];

}

if (downtrend==3)

{

val2[shift]=High[shift];

}

}

return(0);

}

//----

if (Alert_Enabled && (uptrend[0] != 0 || uptrend[0] !=0) && !AlertSent)

{

Alert(Symbol() + "HiLow+3");

AlertSent=true;

}

if (Email_Enabled && (downtrend[0] != 0 || downtrend[0] !=0) && !EmailSent)

{

SendMail(Symbol() + "HiLow+3","HiLow+3 indicator triggered");

EmailSent=true;

}

if(downtrend[0] == 0 && uptrend[0] == 0 )

{

EmailSent=false;

AlertSent=false;

}

return(0);

}

//+------------------------------------------------------------------+
 

Спасибо

mrwobbles:
Где-то в коде скобки не сбалансированы. Похоже, что где-то в коде пропущены } и ). Вам нужно посмотреть и посчитать, сколько открытых и закрытых скобок в коде (+1 для открытых и -1 для закрытых), это должно сказать вам, сколько скобок пропущено (скажем, +2 означает две правые скобки '}' или наоборот). Если он правильно расставил отступы, вы сможете понять, куда вставить правую скобку "}". Счастливой охоты

Мне удалось изменить некоторые настройки и, наконец, я думаю, что почти достиг цели! Теперь после следующей кодировки он говорит:

'shortSL' - переменная не определена

'longSL' - переменная не определена

Вот как это выглядит:

//+------------------------------------------------------------------+

//| Salgado.mq4 |

//| salgadoguilherme@hotmail.com|

//| |

//+------------------------------------------------------------------+

#property copyright ""

#property link "salgadoguilherme@hotmail.com"

extern bool trade=true;

extern int barstocount=50;

extern double lots=0.01;

extern int StopLoss =40;

extern int TakeProfit =10;

extern int slippage=3;

extern int magicnumber=816;

//+------------------------------------------------------------------+

//| функция инициализации эксперта |

//+------------------------------------------------------------------+

int init()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//| функция деинициализации эксперта | |

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//| функция запуска эксперта |

//+------------------------------------------------------------------+

int start()

{

//----

if(trade==true)

{

//M15

double M15_resistance=iCustom(NULL,PERIOD_M15,"!LinRegrBuf", "true",barstocount,2,0);

double M15_resistance_p=iCustom(NULL,PERIOD_M15,"!LinRegrBuf", "true",barstocount,2,barstocount-1);

double M15_line=iCustom(NULL,PERIOD_M15,"!LinRegrBuf", "true",barstocount,0,0);

double M15_support=iCustom(NULL,PERIOD_M15,"!LinRegrBuf", "true",barstocount,1,0);

double slopeM15=((M15_resistance-M15_resistance_p)/barstocount)/Point;

//Alert(DoubleToStr(slopeM15,2);

Comment(

"\n", "M15 Slope | ",slopeM15,

//КРАТКИЙ ВХОД

if(slopeM15<0 && IsTradeAllowed()==true)

{

bool shortopen=false;

int ord_cnt1=OrdersTotal();

for (int start1=0;start1<ord_cnt1;start1++)

{

OrderSelect(start1, SELECT_BY_POS, MODE_TRADES);

if(OrderMagicNumber()==magicnumber && OrderType()==OP_SELL)

{shortopen=true;}

}

if(shortopen==false)

{

double M15High=iHigh(Symbol(),PERIOD_M15,0);

if(M15High>=M15_resistance)

int shortticket=OrderSend(Symbol(),OP_SELL,lots,Bid,slippage,Bid+shortSL,M15_line,DoubleToStr(slopeM15,2);

if(shortticket<0)

{

//ДЛИННЫЙ ВХОД

if(slopeM15>0 && IsTradeAllowed()==true)

{

bool longopen=false;

int ord_cnt=OrdersTotal();

for (int start=0;start<ord_cnt;start++)

{

OrderSelect(start, SELECT_BY_POS, MODE_TRADES);

if(OrderMagicNumber()==magicnumber && OrderType()==OP_BUY)

{ longopen=true; }

}

if(longopen==false)

{

double M15Low=iLow(Symbol(),PERIOD_M15,0);

if(M15Low<=M15_support)

int longticket=OrderSend(Symbol(),OP_BUY,lots,Ask,slippage,Ask-longSL,M15_line,DoubleToStr(slopeM15,2);

if(longticket<0)

{

//----

return(0);

}

//+------------------------------------------------------------------+

 

Свеча типа "Инди

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

Мне очень нужны учебники по MQL по кодированию индикаторов свечного типа, таких как на прикрепленном графике. Просто ссылки где-нибудь на этом форуме или за его пределами подойдут. Большое спасибо.

Piper.

Файлы:
ma_candles.gif  15 kb
 

Не мог бы кто-нибудь подсказать мне, как закодировать следующее;

Подсчитать количество баров с момента пересечения краткосрочной MA с долгосрочной MA.

Спасибо!

 

Код советника для возобновления торгов после закрытия.

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

Есть ли пример кода для советника, который может возобновить управление сделками после остановки, а затем снова вернуться?

Спасибо,

JForex

 

Как кодировать?

darvasboxes:
Не мог бы кто-нибудь подсказать мне, как написать следующий код;

Подсчитайте количество баров с момента пересечения краткосрочной MA с долгосрочной MA.

Спасибо!

Да!

Подсчитайте количество баров с момента их пересечения:

int i;

bool shortGreater = (iMA(NULL,0,8,8,MODE_SMMA,PRICE_MEDIAN,0) > iMA(NULL,0,24,8,MODE_SMMA,PRICE_MEDIAN,0));

bool sgLast;

for(i=0;i<iBars(NULL,0);i++) {

sgLast = shortGreater;

shortGreater = (iMA(NULL,0,8,8,MODE_SMMA,PRICE_MEDIAN,i) > iMA(NULL,0,24,8,MODE_SMMA,PRICE_MEDIAN,i));

if(shortGreater !== sgLast) {

break;

}

}

Переменная i будет содержать количество баров с момента их пересечения.

Не стесняйтесь прислать мне немного денег, если вы нашли это полезным. Буду благодарен.

 

Вот.

Guilhermesalgado:
Мне удалось изменить некоторые настройки и, наконец, я считаю, что почти достиг цели! Теперь после следующей кодировки он говорит:

'shortSL' - переменная не определена

'longSL' - переменная не определена

Вот так. Я взял то, что вы сделали, и изменил это так, что оно скомпилировалось. Остерегайтесь, ваша логика плохая, кажется неполной, и, вероятно, она не сделает то, что вы хотите.

Но вот, пожалуйста.

- ChazzMoney

P.S. $170 - это очень дешево для программы. Я пишу инвестиционное программное обеспечение на заказ один или два раза в год за пятизначную сумму. Программисты, которые берутся за такую работу, должны остерегаться - вам нужно проверять КАЖДОЕ, чтобы убедиться, что вы не упустили случай. Ошибка так же хороша, как и случайный трейдер.

Не стесняйтесь прислать мне немного денег, если вы нашли это полезным. Я ценю ваши мысли.

Файлы:
 

код из стандартного ZigZag

Привет

этот код взят из стандартного "ZigZag.mq4"

"if (counted_bars==0 && downloadhistory) // история была загружена"

counted_bars==0 : проверка, если значение равно нулю, то все в порядке.

downloadhistory : нет проверки условия, почему??? пожалуйста, проясните это.

Спасибо.

 

Открытие 2 ордеров и закрытие 2 ордеров...ПОСТОЯННО.

Я долгое время пытался заставить советника всегда открывать два ордера на покупку или продажу. Один с TP, а другой без него. После открытия 2 ордеров больше не открывать до тех пор, пока не придет время торговать в противоположном направлении.

По какой-то причине я смотрю на историю счета и вижу 1 ордер, затем 3 ордера, затем 4 ордера, затем 2 ордера, и все это работает как мусор.

Может ли ЛЮБОЙ мастер кодирования здесь взглянуть и дать мне информацию?

Благодарю Вас!!!!!!!!!!!!!!!!

ОТКРЫТЫЕ ОРДЕРЫ

-------

BuyTicket1 = False;

BuyTicket2 = False;

while (!BuyTicket1) {

BuyTicket1 = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLoss, Ask + TakeProfit * Point, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);

Sleep(PausebetweenOrders * 1000);}

//if (BuyTicket1 && SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open 1st Buy");

Sleep(1000);

while (!BuyTicket2) {

BuyTicket2 = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLoss, 0, "2nd Buy(#" + MagicNumber + ")", MagicNumber, 0, BlueViolet);

Sleep(PausebetweenOrders * 1000);}

------------

ЗАКРЫТЬ ОРДЕРЫ

------------

if(OrdersTotal() > 0) {

OrderSelect(0, SELECT_BY_POS, MODE_TRADES);

if(OrderType() == OP_SELL){

for (int j = OrdertotalCloseSell-1; j >= 0; j --) {

PositionClosedSell = False;

AttemptsTriedCloseSell = 0;

OrderSelect(j, SELECT_BY_POS, MODE_TRADES);

while (!PositionClosedSell && AttemptsTriedCloseSell < CloseposnAttempts) {

AttemptsTriedCloseSell = AttemptsTriedCloseSell + 1;

OrderCloseSell = OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, MediumSeaGreen);

Sleep(PausebetweenOrders * 1000);

if( OrderCloseSell == True ) { // Позиция закрыта успешно.