0ll Опубликовано 22 июня, 2018 Поделиться Доработка советников: общая тема Опубликовано 22 июня, 2018 Sacred70 я бы сделал так:У Вас советник имеет 2 состояния: 1. ожидание сигнала на вход и 2. торговля (макс. 15 минут)будут нужны переменные:int state = -1; // состояние: -1 - ожидание входа, 0 - торговля Бай, 1 - торговля Селлdatetame dtCheck = 0; // время принятия решенияint count = 0; //счётчик входов внутри сериифункция OnTick будет выглядеть так:{if ( state { state = IsSignal(); // функция возвращает направление торговли или -1 if ( state // сигнал получен!!! if (_Open( state, lot1 )) count++; // открываем первый ордер, вычисляем время проверки, сохраняем тикет}else // проверка результатов торгов{ if ( TimeCurrent() // закрываем сделку и проверяем результат _Close(); // закрываем и сохраняем результат ордера if ( PL > 0 ) reset(); // прибыль - сбрасываем счётчики и состояние серии else { if ( _Open( state, lot1*(count+1) )) count++; // открываем первый ордер, вычисляем время проверки, сохраняем тикет }}}Осталось Ваш код перенести в функции IsSignal, _Open, _Close - справитесь? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sacred70 Опубликовано 22 июня, 2018 Поделиться Доработка советников: общая тема Опубликовано 22 июня, 2018 0ll спасибо. Сегодня ночью постараюсь написать. Есть только пару вопросов по новым функциям: они же должны быть создано до OnTick? И как создать эти функции(мне бы пример первой строки, у меня с этим еще тяжко)? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 22 июня, 2018 Поделиться Доработка советников: общая тема Опубликовано 22 июня, 2018 Sacred70 не обязательно до ОнТик, можно после - на любом пустом месте, разберём написание функции с аргументами и возвратом значения:bool _Open( int Type, double Lots ) // объявление функции с аргументами и типом возвращаемого значения (bool){ double lastTicket = -1; if ( Type == OP_BUY ) lastTicket = OrderSend( NULL, OP_BUY, Lots, Ask, 10, 0, 0, 0, 0, 0, clrBlue ); else if ( Type == OP_SELL ) lastTicket = OrderSend( NULL, OP_SELL, Lots, Bid, 10, 0, 0, 0, 0, 0, clrRed ); if ( lastTicket >= 0 && OrderSelect( lastTicket, SELECT_BY_TICKET ) ) // ордер открыт - сохраняем параметры { dtCheck = OrderOpenTime() + 5*60; // вычисляем время закрытия и проверки результата TKlast = lastTicket; return(true); } return(false);} Изменено 22 июня, 2018 пользователем 0ll Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sacred70 Опубликовано 23 июня, 2018 Поделиться Доработка советников: общая тема Опубликовано 23 июня, 2018 0ll А в функцию reset() что написать? и PL можно заменить на OrderProfit()? if ( PL > 0 ) reset(); // прибыль - сбрасываем счётчики и состояние серии else { Изменено 23 июня, 2018 пользователем Sacred70 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 23 июня, 2018 Поделиться Доработка советников: общая тема Опубликовано 23 июня, 2018 0ll А в функцию reset() что написать? и PL можно заменить на OrderProfit()?В reset нужно обнулить все глобальные переменные: dtCheck = 0, TKlast = count = 0, state = -1.Вместо ПЛ можно использовать OrderProfit(), но нужно быть внимательнее с OrderSelect, иначе можно получить не очевидную ошибку... Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sacred70 Опубликовано 25 июня, 2018 Поделиться Доработка советников: общая тема Опубликовано 25 июня, 2018 0ll прошу помощи с этими функциями, ломал голову все выходные, но так и не понял откуда берутся аргументы и саму конструкцию функции :( Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 25 июня, 2018 Поделиться Доработка советников: общая тема Опубликовано 25 июня, 2018 Sacred70 ничего, понимание придёт. Давай какие-нибудь варианты функций - будем дорабатывать. С reset получилось?void reset() { dtCheck = 0; TKlast = count = 0; state = -1; }В _Close , кроме самого закрытия, нужно выяснить ПЛ ордера и всё. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sacred70 Опубликовано 25 июня, 2018 Поделиться Доработка советников: общая тема Опубликовано 25 июня, 2018 0ll Спойлер bool _Open( int Type, double Lots ) // объявление функции с аргументами и типом возвращаемого значения (bool){ double lastTicket = -1; if ( Type == OP_BUY ) lastTicket = OrderSend(Symbol(), OP_BUY, Lots, Ask, 10, NULL ,NULL ,NULL, 0, 0, Green); else if ( Type == OP_SELL ) lastTicket = OrderSend(Symbol(), OP_SELL, Lots, Bid, 10, NULL ,NULL ,NULL, 0, 0, Red); if ( lastTicket >= 0 && OrderSelect( lastTicket, SELECT_BY_TICKET ) ) // ордер открыт - сохраняем параметры { dtCheck = OrderOpenTime() + 5*60; // вычисляем время закрытия и проверки результата TKlast = lastTicket; return(true); } return(false);}//---------------------------------------------------------------------------------------------------------------------bool IsSignal(){ if (OrdersTotal()Open[3]&&Close[2]>Open[2]&&Open[1]>Close[1]&&Open[1]>UBB&&TKSELL int state = 1; else if (OrdersTotal()Close[3]&&Open[2]>Close[2]&&Close[1]>Open[1]&&Open[1] int state = 0; }написал знаю что криво, но это то до чего додумался//---------------------------------------------------------------------------------------------------------------------bool _Close(){ if (OrdersTotal>0&&dtCheck==300&&OrderSelect(TKBUY, SELECT_BY_TICKET)==true) {CLBUY = OrderClose(TKBUY, LT,Bid,10);} else if (OrdersTotal>0&&dtCheck==300&&OrderSelect(TKSELL, SELECT_BY_TICKET)==true) {CLSELL = OrderClose(TKSELL, LT,Ask,10);}}void reset(){ dtCheck = 0; TKlast = count = 0; state = -1; Изменено 25 июня, 2018 пользователем 0ll Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 25 июня, 2018 Поделиться Доработка советников: общая тема Опубликовано 25 июня, 2018 Sacred701. В bool IsSignal() вместо bool IsSignal() пишем int IsSignal() , вместо int state = 1; пишем return(OP_SELL);2. void _Close(){ if ( OrderSelect( TKlast, SELECT_BY_TICKET ) && OrderClose( TKlast, OrderLots(), OrderClosePrice(), 10 ) ) PL = OrderProfit(); // ордер закрыт, сохраняем профит}Это всё - огонь! Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sacred70 Опубликовано 25 июня, 2018 Поделиться Доработка советников: общая тема Опубликовано 25 июня, 2018 0ll Спасибо. Получилось вот так. единственное в int IsSignal() при компиляции терминал ругается на закрывающую }, а вот в чем проблема не пойму. Спойлер extern int TimeFrame = 0;extern int TP = 0;extern int SL = 0;extern double LT = 0.1;extern int Magic = 12;int TKSELL = -1;int TKBUY = -1;int lastType = -1;bool CLBUY = true;bool CLSELL = true;extern int Len = 7;extern double Filter = 0.0;int TIME =900;int state = -1; // состояние: -1 - ожидание входа, 0 - торговля Бай, 1 - торговля Селлdatetime dtCheck = 0; // время принятия решенияint count = 0; //счётчик входов внутри серииdouble TKlast;double PL;//int Hour(); //+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+int OnInit() {//---//--- return(INIT_SUCCEEDED); }//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+void OnDeinit(const int reason) {}//--- //+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+void OnTick(){ //условие открытия торговли(время открытия и закрытия европейской сессии) if (state=11&&Hour(){ state = IsSignal(); // функция возвращает направление торговли или -1 if ( state // сигнал получен!!! if (_Open( state, LT )) count++; // открываем первый ордер, вычисляем время проверки, сохраняем тикет}else // проверка результатов торгов{ if ( TimeCurrent() // закрываем сделку и проверяем результат _Close(); // закрываем и сохраняем результат ордера if ( OrderProfit() > 0 ) reset(); // прибыль - сбрасываем счётчики и состояние серии else { if ( _Open( state, LT*(count+1) )) count++; // открываем первый ордер, вычисляем время проверки, сохраняем тикет }}}//-------------------------------------------------------------------------------------------------bool _Open( int Type, double Lots ) // объявление функции с аргументами и типом возвращаемого значения (bool){ double lastTicket = -1; if ( Type == OP_BUY ) lastTicket = OrderSend(Symbol(), OP_BUY, Lots, Ask, 10, NULL ,NULL ,NULL, 0, 0, Green); else if ( Type == OP_SELL ) lastTicket = OrderSend(Symbol(), OP_SELL, Lots, Bid, 10, NULL ,NULL ,NULL, 0, 0, Red); if ( lastTicket >= 0 && OrderSelect (lastTicket, SELECT_BY_TICKET ) ) // ордер открыт - сохраняем параметры { dtCheck = OrderOpenTime() + 5*60; // вычисляем время закрытия и проверки результата TKlast = lastTicket; return(true); } return(false);}//---------------------------------------------------------------------------------------------------------------------int IsSignal(){double UBB = iBands (NULL, 0, 15, 2, 2, PRICE_CLOSE, MODE_UPPER, 0);double DBB = iBands (NULL, 0, 15, 2, 2, PRICE_CLOSE, MODE_LOWER, 0); if (OrdersTotal()Open[3]&&Close[2]>Open[2]&&Open[1]>Close[1]&&Open[1]>UBB&&TKSELL return(OP_SELL); else if (OrdersTotal()Close[3]&&Open[2]>Close[2]&&Close[1]>Open[1]&&Open[1] return(OP_BUY); }//---------------------------------------------------------------------------------------------------------------------void _Close(){ if ( OrderSelect(TKlast, SELECT_BY_TICKET ) && OrderClose( TKlast, OrderLots(), OrderClosePrice(), 10 ) ) PL = OrderProfit();}//---------------------------------------------------------------------------------------------------------------------void reset(){ dtCheck = 0; TKlast = count = 0; state = -1;} Снимок.JPG Ссылка на сообщение Поделиться на другие сайты More sharing options...
usver73 Опубликовано 25 июня, 2018 Поделиться Доработка советников: общая тема Опубликовано 25 июня, 2018 а вот в чем проблема не пойму. Он ругается на ситуацию, если ни один из if не сработает, то функции нечего возвращать.Допишите еще return(XXX);Вместо XXX- что нужно вернуть по логике, если нет сигнала, возможно -1. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sacred70 Опубликовано 25 июня, 2018 Поделиться Доработка советников: общая тема Опубликовано 25 июня, 2018 usver73, 0ll Огромное спасибо. все заработало как надо |3=3 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 25 июня, 2018 Поделиться Доработка советников: общая тема Опубликовано 25 июня, 2018 все заработало как надоНе верю... Там есть ошибки, например использование TKBUY и TKSELL - у Вас теперь только TKlast остался. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sacred70 Опубликовано 25 июня, 2018 Поделиться Доработка советников: общая тема Опубликовано 25 июня, 2018 0ll да кстати, есть косяк, он 10 ступеней дважды влупил)) Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sacred70 Опубликовано 28 июня, 2018 Поделиться Доработка советников: общая тема Опубликовано 28 июня, 2018 Пожалуйста,помогите по работе с текстовыми файлами. На тесте файл создается, но туда ничего не записывается. Что не так сделал или на тесте это не работает? Спойлер int file_signal=FileOpen("signal.txt",FILE_TXT|FILE_READ|FILE_WRITE|FILE_SHARE_READ,';');if (state=11&&Hour(){ state = IsSignal(); if ( state if (_Open( state)) {FileWrite(file_signal,Symbol()+ _sig + _time ); count++;} }else { if ( TimeCurrent() _Close(); if (count {FileWrite(file_signal,Symbol()+ count+_sig + _time ); FileClose(file_signal);} if (count==4) {FileWrite(file_signal,Symbol()); FileClose(file_signal); reset(); } if ( PlyusBuy==true||PlyusSell==true) {FileWrite(file_signal,Symbol()); FileClose(file_signal); reset(); } else { if ( _Open( state)) count++; }}} Изменено 28 июня, 2018 пользователем Sacred70 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Rever27 Опубликовано 29 июня, 2018 Поделиться Доработка советников: общая тема Опубликовано 29 июня, 2018 Пожалуйста,помогите по работе с текстовыми файлами //+------------------------------------------------------------------+void WriteCSVFile(double equity) { int file_handle = FileOpen(csvFileName,FILE_READ|FILE_WRITE|FILE_TXT); //check if file exist if(file_handle != INVALID_HANDLE) { if(FileSeek(file_handle,0,SEEK_END) == true) { //переходим в конец файла, чтобы не заменять уже существующие строки FileWrite(file_handle,equity); } FileClose(file_handle); } else Print("Error in FileOpen. Error Code = ",GetLastError());} Вот самая простая формула, у меня работает. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 29 июня, 2018 Поделиться Доработка советников: общая тема Опубликовано 29 июня, 2018 Sacred70 Создал специально скрипт (Вам тоже советую через скрипты пробовать).Вы на каждом тике открываете и закрываете файл? - попробуйте открыть в Ините, а закрывать в ДеИните, а в процессе работы совы - только писать.Если не собираетесь совой читать файл - зачем флаг чтения?File_Write.PNG Изменено 29 июня, 2018 пользователем 0ll Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sacred70 Опубликовано 29 июня, 2018 Поделиться Доработка советников: общая тема Опубликовано 29 июня, 2018 0ll Спасибо, но внедрять скрипт в советника это пока не для моего уровня знаний. А вот открывать и закрывать через OnInit и OnDeinit это интересно, на сколько я понял, из небольшого описания, в соответствующую функцию нужно поместить строку с открытием файла и закрытием. Верно?Вроде все получилось, распихал открытие и закрытие по OnInit и OnDeinit, а само написание засунул в функцию вместе с перемещением в конец файла предварительно задав текст, но почему то из 4 вариантов текста пишет только второй, но это возможно из-за того что на одну из функций компилятор пишет expression has no effect, там я только присваиваю переменной значение текущей цены (Bid). Как это поправить? void _TheEnd(){ bid2==Bid;} Изменено 29 июня, 2018 пользователем Sacred70 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 29 июня, 2018 Поделиться Доработка советников: общая тема Опубликовано 29 июня, 2018 bid2==Bid;Это не присваивание, а сравнение 8-} заработался?ПС: скрипт не надо внедрять, просто посмотреть работающий вызов функций.Если закрывать файл только в деините, то перемещение в конец не нужно, по идее указатель остаётся в конце автоматически, а вот если открывать существующий файл, то перед записью надо перемещать указатель в конец. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sacred70 Опубликовано 30 июня, 2018 Поделиться Доработка советников: общая тема Опубликовано 30 июня, 2018 Добрый день. Вновь взываю к Вам о помощи в воплощении моих грязных фантазий))). x_xВ этот раз хочу вместо открытия ордеров, прописать все действия в файл. Так сказать торговля на бумаге. Смысл таков: Открывается ордер на определенное время и направлении. При этом это только прописывается в файл. Для проверки результатов во время совпадения с условиями открытия ордера фиксируется текущая цена, затем фиксируется цена через заданное время и сравнивается по определенному алгоритму в зависимости от направления сигнала. В случае убытка все должно повторяться пока не получим прибыль или серия не достигнет 3 колен мартина. В данный момент уже плавится мозг, но советник не работает должным образом. Всего 4 варианта сообщений, первый: это оповещение о совпадении с условием, указывается направление сделки, пара, время. Второе: это оповещение о убыточной сделки. Третье: оповещение об убыточной серии. Четвертое: Оповещение о прибыли в серии. В нынешнем состоянии 99% сообщений это номер четыре, без первого. Пожалуйста, помогите разобраться. Подозреваю что косяк в OnTick(), но уже не соображу где. Спойлер int lastType = -1;int state = -1; // состояние: -1 - ожидание входа, 0 - торговля Бай, 1 - торговля Селлdatetime dtCheck = 0; // время принятия решенияint count = 0; //счётчик входов внутри серииdouble TKlast;double bid1B = -1; //цена открытия BUYdouble bid2 = 0; //цена закрытияdouble bid1S = -1; //цена открытия SELLstring naprawlenie;// направление ордераextern int _time = 5; //время экспирацииint file_signal;//int Hour(); //+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+int OnInit() {//--- file_signal=FileOpen("signal.txt",FILE_TXT|FILE_WRITE|FILE_SHARE_READ);//--- return(INIT_SUCCEEDED); }//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+void OnDeinit(const int reason) {FileClose(file_signal);}//--- //+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+void OnTick(){bool PlyusBuy = bid1Bbool MinusBuy = bid1B>bid2; //сделка BUY убыточнаяbool PlyusSell = bid1S>bid2;//сделка SELL прибыльнаяbool MinusSell = bid1Sstring text1 = naprawlenie + " на " + _time +" минут ";string text2 = " - .Ступень номер "+count+". Берем мартина " +naprawlenie + " на " + _time +" минут";string text3 = " Серия закрылась в -.";string text4 = " Серия закрылась в +."; //условие открытия торговли(время открытия и закрытия европейской сессии) if (state=11&&Hour(){ state = IsSignal(); // функция возвращает направление торговли или -1 if ( state // сигнал получен if (_Open( state)&&count==0) { Write(text1); count++; } // фиксируем первый ордер и записываем его данные, прокручивая счетчик}else // проверка результатов торгов{ if ( TimeCurrent() 0 ) return; // время не прошло - выход else { _Close(); // фиксируем цену по остечению времени экспирации if (count>0&&count { Write(text2); reset(); } if (count==3) //фиксация третьей убытосной ступени мартина, оповещение и обнуление { Write(text3); reset(); } }if (count { Write(text4); reset(); } else { if ( _Open( state)&&count }}}//-------------------------------------------------------------------------------------------------bool _Open( int Type) // фиксация цены на сигнале и определение направления и времени от сигнала до экспирации{ double lastTicket = -1; if ( Type == 0 ) //направление вверх + сохранение цены на сигнале {naprawlenie = "Вверх"; lastTicket =bid1B=Bid;} else if ( Type == 1 ) // направление вниз + сохранение цены на сигнале {naprawlenie = "Вниз"; lastTicket =bid1S=Bid;} if ( lastTicket > 0) // сигнал в определенном направлении зафиксирован { dtCheck = TimeCurrent() + _time*60; // вычисляем время закрытия и проверки результата TKlast = lastTicket; return(true); } return(false);}//---------------------------------------------------------------------------------------------------------------------int IsSignal()//поиск сигнала{double highH1 = iHigh(Symbol(), PERIOD_H1, 0);datetime time_H1 = iTime(Symbol(), PERIOD_H1, 0);double lowM5 = iLow(Symbol(), PERIOD_M5, 0);double lowH1 = iLow(Symbol(), PERIOD_H1, 0);double openM5_1 = iOpen(Symbol(), PERIOD_M5, 1);double openM5_2 = iOpen(Symbol(), PERIOD_M5, 2);double openM15 = iOpen(Symbol(), PERIOD_M15, 0);double openH1 = iOpen(Symbol(), PERIOD_H1, 0);double closeM5_1 = iClose(Symbol(), PERIOD_M5, 1);double closeM5_2 = iClose(Symbol(), PERIOD_M5, 2);double closeH1 = iClose(Symbol(), PERIOD_H1, 0);double UBB = iBands (NULL, 0, 21, 2, 2, PRICE_CLOSE, MODE_UPPER, 0);double DBB = iBands (NULL, 0, 21, 2, 2, PRICE_CLOSE, MODE_LOWER, 0); if (Close[3]>Open[3]&&Close[2]>Open[2]&&Open[1]>Close[1]&&Close[1] return(OP_SELL); else if (Open[3]>Close[3]&&Open[2]>Close[2]&&Close[1]>Open[1]&&Close[1]>DBB&&Bid>openM15&&Bid return(OP_BUY); return (state = -1); //нет совпадений}//---------------------------------------------------------------------------------------------------------------------void _Close() //цена по прошествии времени экспирации "_time"{ bid2=Bid;} //---------------------------------------------------------------------------------------------------------------------void reset() //обнуление{ dtCheck = 0; TKlast = 0; count = 0; state = -1; bid1B = -1; bid2 = 0; bid1S = -1; lastType = -1;}void Write(string text) // запись в файл{ FileWrite(file_signal,Symbol() + text);} Изменено 30 июня, 2018 пользователем Sacred70 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 30 июня, 2018 Поделиться Доработка советников: общая тема Опубликовано 30 июня, 2018 Sacred70У Вас есть логические нестыковки: Спойлер 1. if (state=11&&Hour() время нужно проверять в IsSignal, что более логично2. if (_Open( state)&&count==0) // зачем проверяете count - У Вас только-что сигнал образовался? это называется костыль от ошибки, которую лень искать.3. if ( TimeCurrent() 0 ) // см. п 2.4. if (count>0&&count5. if ( _Open( state)&&count6. Вы определитесь со счётчиком: если 3 ордера, то count7. return (state = -1); // странно, что компилятор не ругается..., надо писать: return (-1);8. if ( lastTicket > 0) // Это не то что Вы думаете (сигнал зафиксирован) - сигнал 0 (Бай) здесь не учитывается, надо >= 0 делатьдля Вашего случая функцию Open можно оформить так:bool _Open( int Type) { dtCheck = TimeCurrent() + _time*60; TKlast = Bid; naprawlenie = Type == 0 ? "Вверх" : "Вниз"; }9. Вместо:bool PlyusBuy = bid1Bbool MinusBuy = bid1B>bid2; //сделка BUY убыточнаяbool PlyusSell = bid1S>bid2;//сделка SELL прибыльнаяbool MinusSell = bid1Sсделайтеbool Result;функцию _Close перепишите:bool _Close() { return( State == 0 ? TKlast Bid ); } короче переписал ОнТик: Спойлер bool Result = false;void OnTick(){ if ( state { state = IsSignal(); if ( state if (_Open( state) ) // сигнал получен { Write( (Type == 0 ? "Вверх" : "Вниз") + " на " + _time +" минут " ); count++; } } else { if ( TimeCurrent() //_Close(); - можно убрать Result = State == 0 ? TKlast Bid; if ( Result ) // сделка (№ не важен) закрылась в (+) { Write(" Серия закрылась в +."); reset(); } else if ( count == 3 ) // сделаны 3 усреднения - закрываем серию { Write(" Серия закрылась в -."); reset(); } else // убыток - усредняемся { if (_Open( state) ) count++; Write(" - .Ступень номер "+count+". Берем мартина " +(Type == 0 ? "Вверх" : "Вниз")+ " на " + _time +" минут"); } }}как-то так...bool _Open( int Type) { dtCheck = TimeCurrent() + _time*60; TKlast = Bid; }void reset() { dtCheck = 0; TKlast = 0; count = 0; state = -1; } Изменено 30 июня, 2018 пользователем 0ll Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sacred70 Опубликовано 30 июня, 2018 Поделиться Доработка советников: общая тема Опубликовано 30 июня, 2018 0llСпасибо огромное. Вроде все работает.Немного только не допер про bool Result(), как это работает Изменено 30 июня, 2018 пользователем Sacred70 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 30 июня, 2018 Поделиться Доработка советников: общая тема Опубликовано 30 июня, 2018 Result это не функция - это просто булева переменнаяResult = State == 0 ? TKlast Bid;// перевод: результат = если сделка Бай ? цена открытия цена закрытият.е. Result = true если сделка закрылась в (+) и = false если сделка закрылась в (-)Читай в справке - оператор "?" Изменено 30 июня, 2018 пользователем 0ll Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sacred70 Опубликовано 1 июля, 2018 Поделиться Доработка советников: общая тема Опубликовано 1 июля, 2018 0llа я сделал вот так и у меня работает, но не пойму почему))).и могли бы объяснить эту строку Type == 0 ? "Вверх" : "Вниз" Спойлер bool Result(){ bool PlyusBuy = (bid1B bool MinusBuy = (bid1B>bid2); //сделка BUY убыточная bool PlyusSell = (bid1S>bid2);//сделка SELL прибыльная bool MinusSell = (bid1Sreturn (true); Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 1 июля, 2018 Поделиться Доработка советников: общая тема Опубликовано 1 июля, 2018 Sacred70 Ваша функция Result() не работает, ибо всегда возвращает trueчитайте справку по оператору "?" 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти