нужно другое имя
ObjectCreate("tomato " + high_nr,OBJ_TREND,0,Time[high_nr],high_price,Time[0],high_price); ObjectSet("tomato " + high_nr,OBJPROP_COLOR,Tomato);
после
ObjectCreate("olive"+low_nr,OBJ_TREND,0,Time[low_nr],low_price,Time[0],low_price); ObjectSet("olive"+low_nr,OBJPROP_COLOR,Olive);
код размещает 25 строк, на той же цене, но начиная не со свечи low_nr (которая всегда 10, не имеет значения, какое реальное число после stoch <25), а со свечи 35.
То же самое для помидора.
:(
После создания объекта вы не можете создать другой объект с тем же именем.
Именно поэтому он работает нормально в первый раз, но не после этого (в вашем исходном коде).
Если вы хотите, чтобы на графике отображалась только последняя линия, удовлетворяющая критериям, создайте линию в init, а затем используйте ObjectMove для перемещения объекта в новые координаты.
Если вы хотите, чтобы отображались все предыдущие линии,
ObjectCreate("tomato " + high_nr,OBJ_TREND,0,Time[high_nr],high_price,Time[0],high_price);
Поскольку high_nr - это сдвиг бара, он, скорее всего, будет повторен в более позднее время, поэтому не будет работать должным образом. Используйте дату в имени, и тогда оно будет уникальным.
Здравствуйте
Я пытался написать в коде следующее:
когда K% линии stochastic(80,30,30) > 75, оглядываемся на 36 баров назад (34,shift 2) и рисуем H_линию "помидор" от самого высокого максимума до текущего бара.
Когда K% линии stochastic(80,30,30) < 25, посмотрите на 36 баров назад (34,shift 2) и нарисуйте H_линию "оливка" от самого низкого минимума до текущего бара.
Когда я запускаю это, я получаю первую настройку для tomato и для olive ok, затем даже если в журнале я получаю "tomato ON" разных ценовых уровней, я не получаю новую линию tomato на графике. то же самое для olive.
Идея ea состоит в том, чтобы использовать эти линии для открытия сделок. поэтому в итоге я хочу получить следующее:
когда K%>75
нарисовать линию o самую высокую (последние 36 баров).
если линия ON, не рисовать больше линий, пока линия не будет удалена.
если открыта сделка, удалить линию
если сделка не открыта и прошло 24 бара от бара, который определил k%>75, также удалить линию.
:)
это мой первый код, который я написал в моей дырявой жизни, пожалуйста, научите меня, как посмотреть на проблему.
спасибо
Начнем с начала .....
double stoch=iStochastic(NULL,0,Kperiod,Dperiod,Stochshift,MODE_SMA,1,MODE_MAIN,0);
На баре 0 стох может попасть куда-то при значении бара 0 > 75 и закончиться с меньшим значением.
Нужно ли в этом случае проводить линию? Или это только для близкой цены стохастик заканчивается?
double high_price,low_price; int high_nr,low_nr; high_nr=iHighest(NULL,0,MODE_HIGH,34,2); high_price=High[high_nr]; low_nr=iLowest(NULL,0,MODE_LOW,34,2); low_price=Low[low_nr];
Вы когда-нибудь использовали iHighest и/или iLowest? Посмотрите, как сделать iHighest и iLowest
if(stoch > 75) high_price = High[iHighest(NULL,0,MODE_HIGH,......
if(stoch < 25) low_price = Low[iLowest(........
//-----
for(high_nr=2;high_nr<36;high_nr++) // why do you repeat this ?? { if(Bid<high_price && stoch>75) { ObjectCreate("tomato",OBJ_TREND,0,Time[high_nr],high_price,Time[0],high_price); ObjectSet("tomato",OBJPROP_COLOR,Tomato); Print ("tomato ON"+high_price); } }
одного раза создания достаточно .... цикл повторяет только то, что находится внутри { }
поэтому цикл не нужен для этого ....
затем перед созданием
- проверка запущенных сделок
- проверить, существует ли уже объект с именем, начинающимся на "tomato", и если он существует, то проверить, нужно ли удалить старый объект.
создайте имя в тот момент, когда вы делаете его как
linenamehigh = "tomato "+ TimeToStr(Time[0],TIME_DATE|TIME_MINUTES)
проверка ваших объектов может с
//---- int i, ot=ObjectsTotal()-1; string id; //---- for(i=ot;i>=0;i--) {id=ObjectName(i); if(StringSubstr(id,0,7)=="tomato ") { //check when created if(StringSubstr(id,8,...)< TimeToStr(Time[24],........)){ObjectDelete(id);} } if(StringSubstr(id,0,6)=="olive ") { //..... } }
Щелкните по ссылкам и попытайтесь понять, что происходит
места с ....... внутри кода вы можете попробовать заполнить самостоятельно
Выможете уточнить, чего Вы пытаетесь достичь?
окончательная идея:
Сигнал 1 = когда K%>75 и максимум бара[1] и текущего бара[0] меньше самого высокого максимума из последних 36 баров (High_point)
нарисовать томатную линию на High_point
если томатная линия уже нарисована, не рисуйте больше никаких линий, пока линия не будет удалена.
если открыта сделка с использованием томатной линии, удалите линию.
если сделка не открыта и прошло 96 баров от бара, определившего High_point ,удалите линию.
Теперь я получаю только одну линию на каждом сигнале 1(функция Print посылает 36 "tomato ON" каждый действительный тик, я полагаю), поэтому я должен сказать коду, чтобы остановить цикл после того, как он найдет линию tomato. Я иду варить спагетти и думать, как я должен написать это... в моей голове это должно быть следующим шагом.... надеюсь, я ничего не упустил :)
Я на правильном пути? Большое спасибо за помощь и советы.
код до сих пор:
//+------------------------------------------------------------------+ //| 1expert.mq4 | //| ant | //| | //+------------------------------------------------------------------+ #property copyright "ant" #property link "" #property indicator_chart_window extern int Kperiod = 80; extern int Dperiod = 30; extern int Stochshift = 30; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { double stoch; stoch=iStochastic(NULL,0,Kperiod,Dperiod,Stochshift,MODE_SMA,1,MODE_MAIN,0); double high_price,low_price; int high_nr,low_nr; high_nr=iHighest(NULL,0,MODE_HIGH,34,2); high_price=High[high_nr]; low_nr=iLowest(NULL,0,MODE_LOW,34,2); low_price=Low[low_nr]; datetime H=Time[high_nr]; datetime L=Time[low_nr]; ///////////////////////////////////////////////////////////////////////////////// for(high_nr=2;high_nr<36;high_nr++) { if(Bid<high_price && High[0]<high_price && High[1]<high_price && stoch>75) { ObjectCreate("tomato"+H,OBJ_TREND,0,H,high_price,Time[0],high_price); ObjectSet("tomato"+H,OBJPROP_COLOR,Tomato); Print ("tomato ON"+H); } } /////////////////////////////////////////////////////////////////////////////// for(low_nr=2;low_nr<36;low_nr++) { if(Bid>low_price && Low[0]>low_price && Low[1]>low_price && stoch<25) { ObjectCreate("olive"+L,OBJ_TREND,0,L,low_price,Time[0],low_price); ObjectSet("olive"+L,OBJPROP_COLOR,Olive); Print ("olive ON"+low_price); } } //---- //---- return(0); }
double high_price,low_price; int high_nr,low_nr; high_nr=iHighest(NULL,0,MODE_HIGH,34,2); high_price=High[high_nr]; low_nr=iLowest(NULL,0,MODE_LOW,34,2); low_price=Low[low_nr]; datetime H=Time[high_nr]; datetime L=Time[low_nr]; if (stoch > 75 && High[1] < High[high_nr] && High[0] < High[high_nr]) { ObjectCreate("tomato"+H,OBJ_TREND,0,Time[H],high_price,Time[0],High[0]); ObjectSet("tomato"+H,OBJPROP_COLOR,Tomato); Print ("tomato ON"+H); }
B.T.W. для этого не нужна линия
Случай, о котором вы говорите cichichan, произойдет редко, поэтому вы должны использовать индекс, чтобы вы могли видеть, что вы делаете:
http://charts.mql5.com/3/799/eurusd-h1-fxpro-financial-services.png
Стрелка_вниз не отображается, где-то есть ошибка ....
//+------------------------------------------------------------------+ //| lexpert.mq4 | //| | //+------------------------------------------------------------------+ #property copyright "ant" #property link "" #property indicator_chart_window #property indicator_buffers 8 #property indicator_color1 YellowGreen #property indicator_color2 Coral extern int Kperiod = 80; extern int Dperiod = 30; extern int Stochshift = 30; double arrow_up[]; double arrow_down[]; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- //-------- SetIndexBuffer(0, arrow_up ); SetIndexStyle(0, DRAW_ARROW, STYLE_SOLID,2); SetIndexArrow(0,233); SetIndexEmptyValue(0,0.0); //-------- SetIndexBuffer(1,arrow_down); SetIndexStyle(1, DRAW_ARROW, STYLE_SOLID,2); SetIndexArrow(1,234 ); SetIndexEmptyValue(1,0.0); //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { int limit; int counted_bars=IndicatorCounted(); //---- last counted bar will be recounted if(counted_bars>0) counted_bars--; limit=Bars-counted_bars; //---- macd counted in the 1-st additional buffer for(int i=limit; i>=0; i--) { double stoch_1, stoch_2; stoch_2=iStochastic(NULL,0,Kperiod,Dperiod,Stochshift,MODE_SMA,1,MODE_MAIN,i+2); stoch_1=iStochastic(NULL,0,Kperiod,Dperiod,Stochshift,MODE_SMA,1,MODE_MAIN,i+1); double high_price,low_price; int high_nr,low_nr; high_nr=iHighest(NULL,0,MODE_HIGH,34,i+2); high_price=High[high_nr]; low_nr=iLowest(NULL,0,MODE_LOW,34,i+2); low_price=Low[low_nr]; datetime H=Time[high_nr]; datetime L=Time[low_nr]; ///////////////////////////////////////////////////////////////////////////////// if(Bid<high_price && High[i]<high_price && High[i+1]<high_price && stoch_2<75 && stoch_1 >75) { arrow_down[i] = High[i] + 5*iATR(NULL,0,200,i); ObjectCreate("tomato"+H,OBJ_TREND,0,H,high_price,Time[i],high_price); ObjectSet("tomato"+H,OBJPROP_RAY_RIGHT, false); ObjectSet("tomato"+H,OBJPROP_WIDTH,5 ); ObjectSet("tomato"+H,OBJPROP_COLOR,Tomato); Print ("tomato ON"+H); } else arrow_down[i] = 0.0; /////////////////////////////////////////////////////////////////////////////// if(Bid>low_price && Low[i]>low_price && Low[i+1]>low_price && stoch_2>25 && stoch_1 < 25) { arrow_up[i] = Low[i] - 5*iATR(NULL,0,200,i); ObjectCreate("olive"+L,OBJ_TREND,0,L,low_price,Time[i],low_price); ObjectSet("olive"+L,OBJPROP_COLOR, Yellow ); ObjectSet("olive"+L,OBJPROP_WIDTH,5 ); ObjectSet("olive"+L,OBJPROP_RAY_RIGHT, false); Print ("olive ON"+low_price); } else arrow_up[i] = 0.0; //---- } //---- return(0); }
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте
Я пытался написать в коде следующее:
когда K% линии stochastic(80,30,30) > 75, оглядываемся на 36 баров назад (34,shift 2) и рисуем H_линию "помидор" от самого высокого максимума до текущего бара.
Когда K% линии stochastic(80,30,30) < 25, посмотрите на 36 баров назад (34,shift 2) и нарисуйте H_линию "оливка" от самого низкого минимума до текущего бара.
Когда я запускаю это, я получаю первую настройку для tomato и для olive ok, затем даже если в журнале я получаю "tomato ON" разных ценовых уровней, я не получаю новую линию tomato на графике. то же самое для olive.
Идея ea состоит в том, чтобы использовать эти линии для открытия сделок. поэтому в итоге я хочу получить следующее:
когда K%>75
нарисовать линию o самую высокую (последние 36 баров).
если линия ON, не рисовать больше линий, пока линия не будет удалена.
если открыта сделка, удалить линию
если сделка не открыта и прошло 24 бара от бара, который определил k%>75, также удалить линию.
:)
это мой первый код, который я написал в моей дырявой жизни, пожалуйста, научите меня, как посмотреть на проблему.
спасибо