Индикаторы не имеют права использовать торговые функции.
А вызов скрипта можно туда поставить
Вставте индикатор в эксперта и из него делайте что хотите.
Как вставить, написано здесь:
'Перенос кода индикатора в код эксперта. Строение индикатора.
'
'Перенос кода индикатора в код эксперта. Общие схемы строения
эксперта и индикаторных функций.'
'Перенос кода индикатора в код эксперта. Заключение.'
Почитал некоторые статьи. Набрался верхушек и думаю. Вот теперь я самый умный и всё у меня получится. Добовляю в график #include <ura_buy.mq4> в скрипт естественно в место init start() с надеждой на авось пройдет пишу init ura_buy() , вставляю код открытия ордера, компилирую и с преподнитым настроением самоуверенного глупца жду результатов. После первой неудачи в истерике меняю init ura_buy() на классический init start(). С подозрительной надеждой растягиваю легкую улыбку и... График не хочет принимать starta. В отчаяние перечетал все вышепредложенные ссылки по ассемеляции графиков с экспертами. В бессонных глазах уже вместо "скриптового английского" уже глюки пошли. Думаю всё. Соп. Весь день проспал и вот меня озарило. Дай ка думаю спрошу у знающих людей. Может найдется добрая душа. Подскажет как в реале в место Alert-a мне ордер открыть.
Вопрос жизни и смерти. Помогите ПЛИЗ-З-З-З!
Выложите сюда имеющийся код (только пожайлуста через кнопку MQL ) что бы можно было вам помочь :-)
//+------------------------------------------------------------------+ //| ASCtrend.mq4 | //| Copyright © 2005, MetaQuotes Software Corp. | //| https://www.metaquotes.net/ | //+------------------------------------------------------------------+ #property copyright "Copyright © 2005, MetaQuotes Software Corp." #property link "https://www.metaquotes.net/" #property indicator_chart_window #property indicator_buffers 2 #property indicator_color1 Aqua #property indicator_color2 Magenta extern int RISK=4; extern int AllBars=250; int up=0,dn=0; double val1buffer[]; double val2buffer[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexStyle(0,DRAW_ARROW,EMPTY); SetIndexArrow(0,108); SetIndexBuffer(0, val1buffer); SetIndexStyle(1,DRAW_ARROW,EMPTY); SetIndexArrow(1,108); SetIndexBuffer(1, val2buffer); return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ // int counted_bars=IndicatorCounted(); int start() { double value2; double value3; double value10=10; double value11; double x1=70; double x2=30; int TrueCount; int counter; int MRO1; int MRO2; int i1; double Range; double AvgRange; double val1; double val2; double Table_value2[500][2]; int counted_bars=IndicatorCounted(); value10=3+RISK*2; x1=67+RISK; x2=33-RISK; value11=value10; //---------------------------- if(counted_bars<0) return (-1); if(counted_bars>0) counted_bars--; //last bar recounted int i; int shift = Bars-counted_bars-1; if (shift > AllBars) shift = AllBars; for(i=shift; i>0; i--) { counter=i; Range=0; AvgRange=0; for (counter=i ;counter<=i+9;counter++) { AvgRange=AvgRange+MathAbs(High[counter]-Low[counter]); } Range=AvgRange/10; counter=i; TrueCount=0; while (counter<i+9 && TrueCount<1) { if (MathAbs(Open[counter]-Close[counter+1])>=Range*2.0 ) TrueCount++; counter++; } if (TrueCount>=1) MRO1=counter ; else MRO1=-1; counter=i; TrueCount=0; while (counter<i+6 && TrueCount<1) { if(MathAbs(Close[counter+3]-Close[counter])>=Range*4.6) {TrueCount++;} counter++; } if(TrueCount>=1) MRO2=counter; else MRO2=-1; if (MRO1>-1) value11=3; else value11=value10; if (MRO2>-1) value11=4; else value11=value10; value2=100-MathAbs(iWPR(NULL,0,value11,i)); Table_value2[i][0]=i; Table_value2[i][1]=value2; val1=0; val2=0; value3=0; //------------------- val1 if (value2<x2 ) // x2 = 30 { i1=1; while (Table_value2[i+i1][1]>=x2 && Table_value2[i+i1][1]<=x1) {i1++;} if (Table_value2[i+i1][1]>x1) { value3=High[i]+Range*0.5; val1=value3; } } //------------------- val2 if ( value2>x1) // x1 = 70 { i1=1; while (Table_value2[i+i1][1]>=x2 && Table_value2[i+i1][1]<=x1) {i1++;} if (Table_value2[i+i1][1]< x2) { value3=Low[i]-Range*0.5; val2=value3; } } if (val2!=0 && up==0 ) { val1buffer[i]= val2-1*Point; up=1; dn=0; if(shift<=2) { Alert (Symbol()," ",Period(),"M Asctrend BUY "); } } if (val1 !=0 && dn==0) { val2buffer[i]= val1+1*Point; dn=1; up=0; if(shift<=2) { Alert (Symbol()," ",Period(),"M Asctrend SELL "); } } } return(0); }
вот немного измененный ваш индикатор и советник из пакета MT4. Этот советник получает сигналы на открытие buy и sell из вашего индикатора, а закрывает по MACD.
Но это весьма примитивный вариант больше подходящий для обучения а не для работы.
Надеюсь он вам поможет.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Прошу помощи у знающих людей.
У меня есть индикатор, который дает сигналы на открытие ордеров. Я попытался изменить код и вместо Alert ("...");, поставить функцию открытия ордера OrderSend(Symbol(). Результаты нулевые. Наверное индикаторам не дано такого полномочия, или всё же есть секрет?