Открой код Стохастика. Там есть такие строки:
//---- indicator lines SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0, MainBuffer); SetIndexStyle(1,DRAW_LINE); SetIndexBuffer(1, SignalBuffer);Этот код говорит какие линии рисовать. То есть нам нужно брать значения из массивов MainBuffer и SignalBuffer. Облегчило тебе жизнь? :)
Если же ты используешь не код индикатора, а iCustom, то тогда делай так:
iCustom(NULL, 0, "Stochastic",5,3,3,/*0 или 1, этим значением выбираешь рисуемую линию, т.е. её значение*/,0);Надеюсь помог :)
ЗЫ: сам недавно начал изучать, поэтому могу в чем-то ошибаться.
это понятно! я с с этими массивами и работал! только когда я их преравниваю MainBuffer==SignalBuffer (я хочу сделать чтобы у мея покупка происходила по их пересечению) ни фига не выходит! покупает не по их пересечению а походу от болды((( что нужно приравнять чтобы тем самым определить пересечение стохов?
Фактически мне нужна вот такая ситуация, прописанная в советнике!
т.к. програмист из меня не очень все до чего додумался вот
int TradeSignal() { double stoch2=iStochastic(NULL,15,Kperiod,Dperiod,slowing,MODE_EMA,0,MODE_MAIN,2); double stoch1=iStochastic(NULL,15,Kperiod,Dperiod,slowing,MODE_EMA,0,MODE_MAIN,1); int buysignal=0; if (st2<20 && st1==st2) buysignal=1; return(buysignal); }
но в итоге он почемуто покупает не при пересечении а при сближеннии
и фактическом совпадении! наверно надо как-то подругому это
прописать(пересечение). помогите плз.
да кстати, когда меняю MODE_EMA на MOSE_SMA он ваще не покупает ни фига.
почему так?
Заранее спасибо!!!
cytener писал:
Фактически мне нужна вот такая ситуация, прописанная в советнике!
Если просто пересечение сигнальной и главной линий, то код будет примерно такой:
int TradeSignal() { double stoch_m_1=iStochastic(NULL,15,Kperiod,Dperiod,slowing,MODE_EMA,0,MODE_MAIN,1); double stoch_m_2=iStochastic(NULL,15,Kperiod,Dperiod,slowing,MODE_EMA,0,MODE_MAIN,2); double stoch_s_1=iStochastic(NULL,15,Kperiod,Dperiod,slowing,MODE_EMA,0,MODE_SIGNAL,1); double stoch_s_2=iStochastic(NULL,15,Kperiod,Dperiod,slowing,MODE_EMA,0,MODE_SIGNAL,2); if ( NormalizeDouble( stoch_s_1 - stoch_m_1, Digits ) > 0.0 && NormalizeDouble( stoch_m_2 - stoch_s_2, Digits ) >= 0.0 ) return(1); return(0); }
И по поводу "st1==st2" обязательно почитайте:
Сравнение вещественных чисел
И снова о сравнении двух double
О возможности (или нет) сравнения двух double (?)
спасиб! читаю ссылки!
нужно пересечение сигнальной и главной линии ниже уровня 20. любое пересечение ниже 20-ого уровня.
спасиб! читаю ссылки!
нужно пересечение сигнальной и главной линии ниже уровня 20.
любое пересечение ниже 20-ого уровня.
int TradeSignal() { double stoch_m_1=iStochastic(NULL,15,Kperiod,Dperiod,slowing,MODE_EMA,0,MODE_MAIN,1); double stoch_m_2=iStochastic(NULL,15,Kperiod,Dperiod,slowing,MODE_EMA,0,MODE_MAIN,2); double stoch_s_1=iStochastic(NULL,15,Kperiod,Dperiod,slowing,MODE_EMA,0,MODE_SIGNAL,1); double stoch_s_2=iStochastic(NULL,15,Kperiod,Dperiod,slowing,MODE_EMA,0,MODE_SIGNAL,2); if ( NormalizeDouble( stoch_s_1 - stoch_m_1, Digits ) > 0.0 && NormalizeDouble( 20.0 - stoch_m_1, Digits ) > 0.0 && NormalizeDouble( 20.0 - stoch_s_1, Digits ) > 0.0 && NormalizeDouble( stoch_m_2 - stoch_s_2, Digits ) >= 0.0 ) return(1); return(0); }
извините пожалуйста что я такой тугой и даже не могу нормально
вопрос задать.(
ниже 20 уровня должны быть и сигнальная и основная линии. а еще
они пересекаются(тоже находясь ниже 20 уровня).
вроде как понял что должно быть, начал прогонять на истории
с сентября 2006 года, но у меня первая торговля появляется 27.02.
2007. похоже мне несуждено довести этот советник до работающего
состояния. (((
cytener писал (а):
ниже 20 уровня должны быть и сигнальная и основная линии. а еще
они пересекаются(тоже находясь ниже 20 уровня).
похоже мне несуждено довести этот советник до работающего состояния. (((
Советник - это не только сигнальный блок.Я бы даже сказал, что сигнальный блок - 10% функциональности эксперта.
Остальное - управление ордерами, торговые функции, и т.п.
Не делаются программы для автоматической торговли "с наскоку". Для тестера, конечно, можно что-то написать, но торговать эксперементальным кодом не советую ;)
ну это все ясно!)
просто я в ручную торгуя по своей системе, но хочу ее прогнать
на истории по разным периодам! просто последние 2 месяца рынок
один и я зарабатываю, а когда рынок поменяется, я начну попадать!
и вот чтобы этого не случилось я и пытаюсь свою систему загнать
под четкие рамки программы. ну и конечно надо четче определить
стопы и тэйк профиты! пока фактически торгую по системе пока
профит растет стою, когда начитает убывать крою. а это не правильно.
на НАЙСЕ работал, портфели составлял, там все четко было 5-10%
делал в месяц. но там я точно знал скока убытка я могу себе позволить
и на какой цели крыться. На Форекс сел а тут все подругому.( пока
не все на этом рынке понимаю.
//------- Внешние параметры советника -------------------------------- extern string _Parameters_Trade = "----- Параметры торговли"; extern double Lots = 1; // Размер торгуемого лота extern int StopLoss = 20; // Размер фиксированного стопа extern int TakeProfit = 40; // Размер фиксированного тэйка extern int Kperiod = 39; extern int Dperiod = 5; extern int slowing = 5; extern int Slippage = 3; // Проскальзывание цены extern string _Parameters_Expert = "----- Параметры советника"; extern color clOpenBuy = LightBlue; // Цвет открытия покупки extern color clOpenSell = LightCoral; // Цвет открытия продажи extern color clCloseBuy = Blue; // Цвет закрытия покупки extern color clCloseSell = Red; // Цвет закрытия продажи //---- Глобальные переменные советника ------------------------------- int prevTimeBar; void deinit() { Comment(""); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ void start() { if (prevTimeBar!=Time[0]) OpenPositions(); prevTimeBar=Time[0]; } //+------------------------------------------------------------------+ //| Открытие позиций | //+------------------------------------------------------------------+ void OpenPositions() { double ldStop=0, ldTake=0; int bs=GetTradeSignal(); if (!ExistPosition()) { if (bs>0) { if (StopLoss!=0) ldStop=Ask-StopLoss*Point; if (TakeProfit!=0) ldTake=Ask+TakeProfit*Point; OpenPosition(OP_BUY, ldStop, ldTake); } if (bs<0) { if (StopLoss!=0) ldStop=Bid+StopLoss*Point; if (TakeProfit!=0) ldTake=Bid-TakeProfit*Point; OpenPosition(OP_SELL, ldStop, ldTake); } } } //+------------------------------------------------------------------+ //| Возвращает торговый сигнал | //+------------------------------------------------------------------+ int GetTradeSignal() { double stoch_m_1=iStochastic(NULL,15,Kperiod,Dperiod,slowing,MODE_EMA,0,MODE_MAIN,1); double stoch_m_2=iStochastic(NULL,15,Kperiod,Dperiod,slowing,MODE_EMA,0,MODE_MAIN,2); double stoch_s_1=iStochastic(NULL,15,Kperiod,Dperiod,slowing,MODE_EMA,0,MODE_SIGNAL,1); double stoch_s_2=iStochastic(NULL,15,Kperiod,Dperiod,slowing,MODE_EMA,0,MODE_SIGNAL,2); if ( NormalizeDouble( stoch_s_1 - stoch_m_1, Digits ) == 0.0 && NormalizeDouble( 20.0 - stoch_m_1, Digits ) >= 0.0 && NormalizeDouble( 20.0 - stoch_s_1, Digits ) >= 0.0 && NormalizeDouble( stoch_m_2 - stoch_s_2, Digits ) == 0.0 ) return(1); } //+------------------------------------------------------------------+ //| Возвращает флаг существования позиции по номеру | //+------------------------------------------------------------------+ bool ExistPosition() { for (int i=0; i<OrdersTotal(); i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==Symbol()) { if (OrderType()==OP_BUY || OrderType()==OP_SELL) return(True); } } } return(False); } //+------------------------------------------------------------------+ //| Открытие позиции | //| Параметры: | //| op - операция | //| ldStop - уровень стоп | //| ldTake - уровень тейк | //+------------------------------------------------------------------+ void OpenPosition(int op, double ldStop, double ldTake) { color clOpen; double pp; if (op==OP_BUY) { clOpen=clOpenBuy; pp=Ask; } else { clOpen=clOpenSell; pp=Bid; } pp=NormalizeDouble(pp, Digits); OrderSend(Symbol(),op,Lots,pp,Slippage,ldStop,ldTake,"",0,0,clOpen); } //+------------------------------------------------------------------+komposter посмотри плз. то что я написал. вроде все правильно, но после того как изменения внес ваще не покупает(((. не понимаю почему.
на bs<0 не смотри, функциэ под этот параметр хотел позже вставить, но т.к. даже в таком варианте не работает, то пака забил на нее.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
за основу взял исходный стохастик из "индикаторов" и пытаюсь в него добавить различные функции торговли. суть в том что я пытаюсь прописать место пересечения стохов, но не могу найти какие показаиели за это отвечают(((
похоже что все это можно сделать в 100 раз проще, но как не догоняю. начал разбираться в уже написаных советниках(самые простые МАКД и МА), но это только усугубило ситуацию! теперь вообще один бордак в голове(((
помогите, кто чем спожет, пожалуйста.