Ticket_S = (OrderSend(Symbol(),OP_SELL,Lots,Bid,Slip,0,0,Comments,MAGIC,0,Blue);
// Buy entry if(( MAFast1 > MASlow1 && MAFast4 <= MASlow4 && MAFast3 > MASlow3 && cci3 < CCI_Buy_Point && cci2 <= CCI_Buy_Point && cci1 > CCI_Buy_Point ) else if (MAFast1 > MASlow1 && MAFast4 <= MASlow4 && MAFast3 > MASlow3 && cci1 > CCI_Buy_Point ) else if ( MAFast2 <= MASlow2 && MAFast1 > MASlow1 && MAFast3 > MASlow3 && cci1 > CCI_Buy_Point ) else (MAFast1 > MASlow1 && MAFast3 > MASlow3 && cci3 < CCI_Buy_Point && cci2 <= CCI_Buy_Point && cci1 > CCI_Buy_Point ) && ( Ticket_L == 0 || Ticket_L == -1 ) && ( Ticket_S == 0 || Ticket_S == -1 )) { Ticket_L = (OrderSend(Symbol(),OP_BUY,Lots,Ask,Slip,0,0,Comments,MAGIC,0,Red); }
проверьте приведенную выше мешанину, вот где проблема.
Эта куча бессмыслицы типа "если - то, если - то" должна быть полностью переписана.
Помните, что мы пишем торговое приложение.
Торговое приложение, которое должно работать в режиме нон-стоп, и оно должно работать в критически важном режиме.
Мы не пытаемся быть милыми.
Мы не пытаемся быть модными.
Мы не пытаемся сделать java-приложение или flash-приложение за тридцать минут или меньше.
Нам не нужна фантазия, нам нужна прибыль.
Разбейте этот код на части так, чтобы он был легко читаем.
0/.
Спасибо, что так быстро ответили. У меня проблема с пониманием разницы между If else и ||
в чем разница при написании нескольких условий... Нужно ли мне использовать if else или можно просто использовать || ..... Я вообще не понимаю разницы между if else и || ...(-...-)
вместо того, чтобы делать это:
if(x>y && y<r && p<=t) run();
можно сделать что-то вроде этого:
flag=1;
if(x<=y) flag=0;
if(y>=r) flag=0;
if(p>t)flag=0;
if(flag==1) run();
Понимаете, о чем я?
так гораздо проще понять, хотя мой пример был написан на скорую руку.
всегда пишите свой торговый код так, чтобы абсолютный идиот мог понять его логику.
В противном случае, возможно, вы не до конца понимаете свой код, и тогда он не будет делать то, что вы хотели.
Понимаете, о чем я?
Есть и другие способы сделать то, о чем я говорю.
если у вас есть другие вопросы, или если вы действительно хотите, чтобы я помог вам упростить ваш вышеприведенный код, просто спросите.
0/.
Видео: Kid Rock - American Badass
if( MAFast1 > MASlow1 && MAFast4 <= MASlow4 && MAFast3 > MASlow3 && cci3 < CCI_Buy_Point && cci2 <= CCI_Buy_Point && cci1 > CCI_Buy_Point ) {} else if (MAFast1 > MASlow1 && MAFast4 <= MASlow4 && MAFast3 > MASlow3 && cci1 > CCI_Buy_Point ) {} else if ( MAFast2 <= MASlow2 && MAFast1 > MASlow1 && MAFast3 > MASlow3 && cci1 > CCI_Buy_Point ) {} else // (MAFast1 > MASlow1 && MAFast3 > MASlow3 && cci3 < CCI_Buy_Point && cci2 <= CCI_Buy_Point && cci1 > CCI_Buy_Point ) /* && ( Ticket_L == 0 || Ticket_L == -1 ) && ( Ticket_S == 0 || Ticket_S == -1 )) */ { Ticket_L = OrderSend(Symbol(),OP_BUY,Lots,Ask,Slip,0,0,Comments,MAGIC,0,Red); }
в вашем коде есть несколько действительно серьезных ошибок.
Давайте посмотрим, сможем ли мы разобраться с ними И в процессе мы научим вас, как это должно работать...
Обратите внимание на фигурные скобки{}, которые я вставил после первой, второй и третьей строк...
вы делали это:
if(...)
else if(...)
else(...)
&& whatever whatever
{}
это просто бессмысленно.
if и else if и else работают следующим образом:
if(comparison) {do this}
else if(comparison) {do this}
else {do this}
Дайте мне знать, если вам нужна еще какая-либо помощь.
0/.
вместо того, чтобы делать это:
if(x>y && y<r && p<=t) run();
можно сделать что-то вроде этого:
flag=1;
if(x<=y) flag=0;
if(y>=r) flag=0;
if(p>t)flag=0;
if(flag==1) run();
Понимаете, о чем я?
так гораздо проще понять, хотя мой пример был написан на скорую руку.
всегда пишите свой торговый код так, чтобы абсолютный идиот мог понять его логику.
В противном случае, возможно, вы не до конца понимаете свой код, и тогда он не будет делать то, что вы хотели.
Понимаете, о чем я?
Есть и другие способы сделать то, о чем я говорю.
если у вас есть другие вопросы, или если вы действительно хотите, чтобы я помог вам упростить ваш вышеприведенный код, просто спросите.
0/.
Видео: Kid Rock - American Badass
Спасибо за помощь... на самом деле я совсем новичок в кодировании и не понимаю, что вы написали выше... Я знаю, что есть много способов написать одну и ту же кодировку ///
Люди, которые привыкли, могут написать то, что я хочу написать в 3 строках, в то время как я пишу 30..... Я знаю, что это требует усилий, чтобы быть в состоянии написать ..... Ну да, я буду благодарен, если вы мне поможете, но начните с того, что вы знаете (-...-;)
Я все еще маленькая рыбка, плавающая в большом океане и не знаю размеров океана ......... Я имею в виду, что я потерялся. Не могли бы вы объяснить мне, как просто избежать 10 миллионов линий, если они не нужны... Я хочу использовать 4 ma пересечения CCI и полосы Болинджера для выхода, как вы
вы можете видеть с вышеуказанным источником.... Спасибо в любом случае. С уважением.
Thanks i will try to understand....... SEE what i m doing coz it seems that i do not know what i m doing myself
Ладно, хорошо, я не знал, что ты новичок.
Тогда давайте не будем торопиться.
Самое основное, что вы можете сделать, это вот это:
if( MAFast1 > MASlow1 && MAFast4 <= MASlow4 && MAFast3 > MASlow3 && cci3 < CCI_Buy_Point && cci2 <= CCI_Buy_Point && cci1 > CCI_Buy_Point ) { Ticket_L = OrderSend(Symbol(),OP_BUY,Lots,Ask,Slip,0,0,Comments,MAGIC,0,Red); }
очень элементарно...
Вы ведь понимаете, что && означает AND?
Если вы говорите это в коде: if(x==1 && y==1) {dothis();}
то на самом деле вы говорите так: if(x равно 1 и y равно 1) {dothis();}
дайте мне знать, когда вы будете со мной, или дайте мне знать, когда вы запутаетесь, и я верну вас на путь истинный.
ЕСЛИ ВЫ НОВИЧОК, ДЕЛАЙТЕ ВСЕ ОЧЕНЬ ПРОСТЫМ СПОСОБОМ... НЕ УСЛОЖНЯЙТЕ... БУДЬТЕ ПРОЩЕ...
Ладно, хорошо, я не знал, что ты новичок.
Тогда давайте не будем торопиться.
Самое основное, что вы можете сделать, это вот это:
очень элементарно...
Вы ведь понимаете, что && означает AND?
Если в коде вы говорите так: if(x==1 && y==1) {dothis();}
то на самом деле вы говорите так: if(x равно 1 и y равно 1) {dothis();}
дайте мне знать, когда вы будете со мной, или дайте мне знать, когда вы запутаетесь, и я верну вас на путь истинный.
Спасибо, что научили меня. Да, теперь я понимаю, что вы имеете в виду. Есть 4 пересечения MAs и условия CCI, которые должны быть выполнены перед входом. Однако бывают случаи, когда эти индикаторы выполняют свои условия в разное время...
Например, сначала пересекаются быстрые MAs, затем медленные MAs, затем CCI... или сначала CCI, затем быстрые MAs и медленные MAs. Или сначала медленные МА, потом быстрые МА, а затем CCI ..... Мне нужно закодировать все случаи, если я хочу, чтобы мой советник входил во всех случаях...
Я закодировал все случаи, обратившись к первому источнику, который я скопировал в первом комментарии, или они просто бессмысленны... Здесь я написал это с || вместо If else..... Имеет ли это смысл... все равно написано "Несбалансированная левая скобка", ......
//マジックナンバーの定義 #define MAGIC 4649 // parameter extern double Lots = 1.0; //取引ロット数 extern int Slip = 10; //許容スリッページ数 extern string Comments = ""; //コメント extern int FastMA1_p = 34; extern int SlowMA1_p = 34; extern int modeMA1 = MODE_SMA; extern int modeMA2 = MODE_EMA; extern int MA1Cross_Timeframe = PERIOD_M15; extern int FastMA2_p = 68; extern int SlowMA2_p = 68; extern int CCI_p = 20; extern int CCI_Buy_Point = 100; extern int CCI_Sell_Point = -100; extern int CCI_Timeframe = PERIOD_M30; extern int Band_p = 6; extern int Band_Timeframe = PERIOD_M15; //variables// int Ticket_L = 0; int Ticket_S = 0; int Exit_L = 0; int Exit_S = 0; int start() { double MAFast1 = iMA(NULL, MA1Cross_Timeframe, FastMA1_p, 0, modeMA2, PRICE_CLOSE, 0); double MAFast2 = iMA(NULL, MA1Cross_Timeframe, FastMA1_p, 0, modeMA2, PRICE_CLOSE, 1); double MASlow1 = iMA(NULL, MA1Cross_Timeframe, SlowMA1_p, 0, modeMA1, PRICE_CLOSE, 0); double MASlow2 = iMA(NULL, MA1Cross_Timeframe, SlowMA1_p, 0, modeMA1, PRICE_CLOSE, 1); double MAFast3 = iMA(NULL, MA1Cross_Timeframe, FastMA2_p, 0, modeMA2, PRICE_CLOSE, 0); double MAFast4 = iMA(NULL, MA1Cross_Timeframe, FastMA2_p, 0, modeMA2, PRICE_CLOSE, 1); double MASlow3 = iMA(NULL, MA1Cross_Timeframe, SlowMA2_p, 0, modeMA1, PRICE_CLOSE, 0); double MASlow4 = iMA(NULL, MA1Cross_Timeframe, SlowMA2_p, 0, modeMA1, PRICE_CLOSE, 1); double cci1 = iCCI(NULL, CCI_Timeframe, CCI_p, PRICE_CLOSE, 0); double cci2 = iCCI(NULL, CCI_Timeframe, CCI_p, PRICE_CLOSE, 1); double cci3 = iCCI(NULL, CCI_Timeframe, CCI_p, PRICE_CLOSE, 2); double bands_upper1 = iBands(NULL, Band_Timeframe, Band_p,1, 0, PRICE_CLOSE, MODE_UPPER, 1); double bands_upper2 = iBands(NULL, Band_Timeframe, Band_p,1, 0, PRICE_CLOSE, MODE_UPPER, 2); double bands_lower1 = iBands(NULL, Band_Timeframe, Band_p,1, 0, PRICE_CLOSE, MODE_LOWER, 1); double bands_lower2 = iBands(NULL, Band_Timeframe, Band_p,1, 0, PRICE_CLOSE, MODE_LOWER, 2); //韮uy exit if( Close[2]>= bands_upper2 && Close[0] <bands_upper1 && ( Ticket_L != 0 && Ticket_L != -1 )) { Exit_L = OrderClose(Ticket_L,Lots,Bid,Slip,Red); if( Exit_L ==1 ) {Ticket_L = 0;} } //Sell exit if( Close[2] <= bands_lower2 && Close[0] > bands_lower1 && ( Ticket_S != 0 && Ticket_S != -1 )) { Exit_S = OrderClose(Ticket_S,Lots,Ask,Slip,Blue); if( Exit_S ==1 ) {Ticket_S = 0;} } // buy entrt if( ( MAFast1 > MASlow1 && MAFast4 <= MASlow4 && MAFast3 > MASlow3 && cci3 < CCI_Buy_Point && cci2 <= CCI_Buy_Point && cci1 > CCI_Buy_Point )//fast MA first, slow MA and cci later. || (MAFast1 > MASlow1 && MAFast4 <= MASlow4 && MAFast3 > MASlow3 && cci1 > CCI_Buy_Point ) || ( ( MAFast2 <= MASlow2 && MAFast1 > MASlow1 && MAFast3 > MASlow3 && cci1 > CCI_Buy_Point ) || (MAFast1 > MASlow1 && MAFast3 > MASlow3 && cci3 < CCI_Buy_Point && cci2 <= CCI_Buy_Point && cci1 > CCI_Buy_Point ) && ( Ticket_L == 0 || Ticket_L == -1 ) && ( Ticket_S == 0 || Ticket_S == -1 )) { Ticket_L = OrderSend(Symbol(),OP_BUY,Lots,Ask,Slip,0,0,Comments,MAGIC,0,Red); } //sell entry if( (MAFast1 < MASlow1 && MAFast4 >= MASlow4 && MAFast3 < MASlow3 cci3 > CCI_Sell_Point && cci2 >= CCI_Sell_Point && cci1 < CCI_Sell_Point) || ( MAFast1 < MASlow1 && MAFast4 >= MASlow4 && MAFast3 < MASlow3 && cci1 < CCI_Sell_Point ) ||( MAFast2 >= MASlow2 && MAFast1 < MASlow1 && MAFast3 < MASlow3 && cci1 < CCI_Sell_Point) ||( MAFast1 < MASlow1 && MAFast3 < MASlow3 && cci3 > CCI_Sell_Point && cci2 >= CCI_Sell_Point && cci1 < CCI_Sell_Point ) && ( Ticket_S == 0 || Ticket_S == -1 ) && ( Ticket_L == 0 || Ticket_L == -1 )) { Ticket_S = OrderSend(Symbol(),OP_SELL,Lots,Bid,Slip,0,0,Comments,MAGIC,0,Blue); } return(0); }
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Может ли кто-нибудь помочь мне найти эту ошибку Несбалансированная левая скобка.... я пробовал себя все комбинации, но это никогда не решает....
и также подскажите, все ли случаи правильно написаны ....
Я пытался написать 4 ma crosses и cci выше 100 или -100 для покупки и продажи ... Заранее спасибо!