Посмотри http://vinin.ucoz.ru/load/2-1-0-13
Может поможет
Вариант Vinin'а простой и надежный, но имеет один недостаток: сигнал повторяется на каждом тике, пока не закроется бар.
Есть более сложный вариант, но он сигналит один раз, предназначен для индикатора со стрелками.
Проблема звуковой сигнализации достаточно подробно освещена komposter'ом в статье "Звуковые сигналы в индикаторах".
extern bool UseSound=true; extern string SoundFile="Alert.wav"; bool SoundBuy = False; bool SoundSell = False; //--- start(){ .......... //---все циклы закончены //---звуковой сигнал начало, b2-стрелка buy, b1-стрелка sell if (b2[0] != EMPTY_VALUE && b2[0] != 0 && SoundBuy) { SoundBuy = False; if (UseSound) PlaySound (SoundFile); } if (!SoundBuy && (b2[0] == EMPTY_VALUE || b2[0] == 0)) SoundBuy = True; if (b1[0] != EMPTY_VALUE && b1[0] != 0 && SoundSell) { SoundSell = False; if (UseSound) PlaySound (SoundFile); } if (!SoundSell && (b1[0] == EMPTY_VALUE || b1[0] == 0)) SoundSell = True; //---звуковой сигнал конец return(0); } //---
прошу помощи.
Сваял первый советник. При компиляции всё окей. Но в тестере выдаёт:
16:26:57 expertMA: loaded successfully16:27:28 TestGenerator: unmatched data error (low value 1.2843 at 2009.02.04 12:45 is not reached from the least timeframe, low price 1.2854 mismatches)
16:27:28 expertMA inputs: MAPeriod=6; MAShift=0; Lots=1; MagicNumber=123456;
16:35:01 expertMA inputs: MAPeriod=6; MAShift=0; Lots=1; MagicNumber=123456;
Советник создавал начитавшись статей с форума. Идея самая простая, МА пересекает цену-открывается ордер, следуюшее пересечение - закрывается.
То что снизу вверх это бай, сверху вниз это шел это понятно.
Подскажите, где я допустил ошибку.
Привожу текст советника.
//+------------------------------------------------------------------+//| expertMA.mq4 |
//| Copyright © 2009, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
//---- input parameters
extern int MAPeriod=6;
extern int MAShift=0;
extern int Lots=1;
extern int MagicNumber=123456;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
int deinit()
{
//----
//----
return(0);
}
bool CheckOrders(int Type)
{
bool Result=True;
for(int i=0;i<OrdersTotal();i++)
if(OrderSelect(i,SELECT_BY_POS))
if(OrderMagicNumber()==MagicNumber && OrderSymbol() == Symbol())
if(OrderType()==Type)
{
if(Type==OP_BUY)
if(!OrderClose(OrderTicket(),OrderLots(),Bid,0))
Result=False;
if(Type==OP_SELL)
if(!OrderClose(OrderTicket(),OrderLots(),Ask,0))
Result=False;
}
else Result=False;
return(Result);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
double MA = NormalizeDouble(iMA(NULL, 0, MAPeriod, MAShift, MODE_EMA, PRICE_MEDIAN, 1), Digits);
if(Open[1] > MA && Open[1] < MA)
if(CheckOrders(OP_SELL))
{
if(!OrderSend(Symbol(), OP_BUY, Lots, Ask, 3, 0, 0, NULL, MagicNumber))
Print("Не открыт ордер Buy. Ошибка №", GetLastError());
}
if(Open[1] < MA && Open[1] > MA)
if(CheckOrders(OP_BUY))
{
if(!OrderSend(Symbol(), OP_SELL, Lots, Bid, 10, 0, 0, NULL, MagicNumber))
Print("Не открыт ордер Sell. Ошибка №", GetLastError());
}
//----
return(0);
}
//+------------------------------------------------------------------+
Вариант Vinin'а простой и надежный, но имеет один недостаток: сигнал повторяется на каждом тике, пока не закроется бар.
Есть более сложный вариант, но он сигналит один раз, предназначен для индикатора со стрелками.
Проблема звуковой сигнализации достаточно подробно освещена komposter'ом в статье "Звуковые сигналы в индикаторах".
Достаточно поставить контроль сигнала не на нулевом, а на первом баре.
Сваял первый советник. При компиляции всё окей. Но в тестере выдаёт:
16:27:28 TestGenerator: unmatched data error (low value 1.2843 at 2009.02.04 12:45 is not reached from the least timeframe, low price 1.2854Блин, а я тут вспомнил что когда-то натыкался на музыкальный индикатор, играющий "мелодию" рынка ну или что-то типа того... Обыскался уже... Никто не встречал? Захотелось на слух поторговать)
granit77 писал и посоветовал
На сайте кроме живых людей есть еще поиск (unmatched data error), там можно найти множество вариантов ответа на свой вопрос.
У меня вопрос, в тестере другие советники показывают всё нормально, все показания есть, в журнале и в отчёте всё показывают, а этот советник показывает одни нули. В поиске, прочитал, чтоб смотрели историю, но другие то торгуют. Может я что то напутал в коде.... Заранее благодарен.
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
IndicatorBuffers(2);
IndicatorShortName("i-BandsWidth ("+BandsPeriod+", "+DoubleToStr(BandsDeviations,1)+", "+Slow+")");
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,Buffer);
SetIndexBuffer(1,BWBuffer);
return;
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
void deinit() {
return;
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
void start() {
int i,j,limit,cbars;
double sum,oldval,newres,deviation,upband,dwband;
//---------------------------------------------------
cbars=IndicatorCounted();
if(Bars<=BandsPeriod) return;
if(cbars<0) return;
if(cbars>0) limit=Bars-cbars-1;
else limit=Bars-BandsPeriod-1;
for(i=0;i<=limit;i++) {
sum=0.0;
oldval=iMA(NULL,0,BandsPeriod,BandsShift,MODE_SMA,PRICE_CLOSE,i);
for(j=0;j<BandsPeriod;j++) {
newres=Close[i+j]-oldval;
sum+=newres*newres;
}
deviation=BandsDeviations*MathSqrt(sum/BandsPeriod);
upband=oldval+deviation;
dwband=oldval-deviation;
if(oldval!=0)
BWBuffer[i]=(upband-dwband)/oldval;
}
for(i=0;i<=limit;i++) {
Buffer[i]=iMAOnArray(BWBuffer,0,Slow,0,0,i);
}
return;
}
//+------------------------------------------------------------------+