Ответить
17.03.2010, 05:52
Аватар для Frim_mgn
Frim_mgn Frim_mgn вне форума Активный участник
Регистрация: 18.01.2010 / Сообщений: 83
Поблагодарили 32 раз(а) / Репутация: 37

По умолчанию Ошибка при компиляции mq4

internal stack overflow-simplify the program, please

По каким причим она появляется? Я так понимаю в индикаторах какое то ограничение стоит? Если переписать индикатор через советник, ошибка пропадет?
17.03.2010, 07:32
Аватар для supervisor
supervisor supervisor вне форума Супер-модератор
Регистрация: 07.08.2008 / Сообщений: 903
Поблагодарили 192 раз(а) / Репутация: 318
попробуйте ограничить число обрабатываемых баров до 100
27.10.2013, 12:39
Аватар для oleg777
oleg777 oleg777 вне форума Местный знаток
Регистрация: 17.01.2010 / Сообщений: 516
Поблагодарили 525 раз(а) / Репутация: 523

Скрытый текст

//+------------------------------------------------------------------+
//| Martin TestNapisanie.mq4 |
//| Copyright 2013, MetaQuotes Software Corp. |
//| _http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"

extern double Lots = 0.1;
extern int TakeProfit =50;
extern int Step =30;
extern double Multiplier = 2;
extern int Magic =123;
extern int Slippage =5;
extern int ticket; // для модификации ордера
double price, TP, lastlot; // цена, тейк профит

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
if(Digits == 3 || Digits== 5) // для перевода с 4 х знаков на 5,
TakeProfit*=10; //умножаем тейк профит и степ на 10
Step*=10;
Slippage*=10;
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{

return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
if (CountTrades() == 0)
{
double ima = iMA(Symbol(), 0, 30, 0, MODE_SMA, PRICE_CLOSE, 1); // нажав ф1 мы уувидим какие парметры нужно указать для мовен еверидж
if (Ask> ima)
{
ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "", Magic, 0, Blue); // тейк профит и стоп ставим 0 для есн счетов где допустима модификация после открытия ордера
if (ticket > 0) // если тикет больше 0 то открываем ордер ( проверка)
{
TP = NormalizeDouble(Ask + TakeProfit * Point, Digits); // определяем тейк профит
OrderModify(ticket, OrderOpenPrice(), 0, TP, 0); // модифицируем ордер,OrderOpenPrice - рыночный ордер нt тложенный

}

}
else if(Bid < ima)

{
ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "", Magic, 0, Red); // тейк профит и стоп ставим 0 для есн счетов где допустима модификация после открытия ордера
if (ticket > 0)
// если тикет больше 0 то открываем ордер ( проверка)
{
TP = NormalizeDouble(Bid - TakeProfit * Point, Digits); // определяем тейк профит
OrderModify(ticket, OrderOpenPrice(), 0, TP, 0);
}

}

}
else
{
int order_type = FindLastOrderType(); // определяем какой у нас ордер бай или селл и не нужна ли ему доливка
if (order_type == OP_BUY) // нужно ли усреднение для бая
{
price = FindLastPrice(OP_BUY) // находим последнюю цену на покупку
if(Ask <= price - Step * Point)
{
lastlot = FindLastLots(OP_BUY);
lastlot = NormalizeDouble(lastlot * Multiplier, 2)
ticket = OrderSend(Symbol(), OP_BUY, lastlot, Ask, Slippage, 0, 0, "", Magic, 0, Blue); // увеличваем следующий ордер
if(ticket>0)
ModifyOrders(OP_BUY);

}
}
else if (order_type == OP_SELL)
{
price = FindLastPrice(OP_SELL) // находим последнюю цену на ппродажу
if(Bid <= price + Step * Point)
{
lastlot = FindLastLots(OP_SELL);
lastlot = NormalizeDouble(lastlot * Multiplier, 2)
ticket = OrderSend(Symbol(), OP_SELL, lastlot, Bid, Slippage, 0, 0, "", Magic, 0, Red); // увеличваем следующий ордер
if(ticket>0)
ModifyOrders(OP_SELL);

}


}
}
return(0);
}
//+------------------------------------------------------------------+
void ModifyOrders(int otype) // модифицируем тейк профит если более 1 сделки
{
double avgprice = 0,
oreder_lots = 0;
price = 0;
for(int i=OrdersTotal-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype)
{
price += OrderOpenPrice() * OrderLots();

oreder_lots = OrderLots();
}
}
}
avgprice = NormalizeDouble(price / order_lots, Digits);

if (otype == OP_BUY) TP = NormalizeDouble(avgprice + TakeProfit * Point, Digits);
if (otype == OP_SELL) TP = NormalizeDouble(avgprice - TakeProfit * Point, Digits);
for(i= OrdersTotal()-1; i>=0, i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype)

OrderModify( OrderTicket(), OrderOpenPrice(), 0, TP, 0);

}
}
}
//+------------------------------------------------------------------+
double FindLastLots(int otype) //определяем на сколько нужно увеличить следующий лот
{
double oldlots;
int oldticket;
ticket = 0;
for( int i = OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype)
{
oldticket = OrderTicket();
if(oldticket > ticket)
{
oldlots = OrderLots();
ticket = oldticket;
}

}

}

}
return(oldlots);
}

//+------------------------------------------------------------------+
double FindLastPrice(int otype) // ищем последний ордер, чтобы от него усреднится по номеру последнего тикета
{
double oldopenprice;
int oldticket;
ticket = 0;
for (int i = OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype)
{
oldticket = OrderTicket();
if (oldticket > ticket)
{
oldopenprice = OrderOpenPrice();
ticket = oldticket;
}

}

}

}
return(oldopenprice);
}


//+------------------------------------------------------------------+
int FindLastOrderType() // прописываем саму функцию FindLastOrderType();

{
for (int i = OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{

if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
return(OrderType());


}
}
return(-1);
}






//+------------------------------------------------------------------+

int CountTrades()
{
int count = 0; // пока ордеров у нас нет, значит =0
for ( int i=OrdersTotal()-1; i>=0; i--) //открывыем цикл (for)и начинаем перебирать ордера
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) // нажав ф1 можно посмотреть что значит селект ордерс
{
if(OrderSymbol()== Symbol() && OrderMagicNumber() == Magic) // проверяем наш ли этот ордер и по нашей ли паре и магику
count++; // если ордер наш то мы его будем увеличивать на единицу
}

}
return(count); // в конце возвращаем переменную( количество ордеров)

}
//+------------------------------------------------------------------+
[свернуть]

помогите в чем ошибка при компиляции

Последний раз редактировалось NSerega; 27.10.2013 в 15:53.
27.10.2013, 13:32
Аватар для Slim33
Slim33 Slim33 вне форума Элитный участник
Регистрация: 17.08.2008 / Сообщений: 205
Поблагодарили 1,989 раз(а) / Репутация: 1989
Я бы рекомендовал такие ошибки отлавливать самостоятельно, не заглядывая в подсказку.
Подсказка - в прицепе

В файле Martin TestNapisanie-m2.mq4 исправления отмечены символами "//***"

"Прицеп" - это вложенный файл

Последний раз редактировалось Slim33; 27.10.2013 в 14:10.
27.10.2013, 13:44
Аватар для oleg777
oleg777 oleg777 вне форума Местный знаток
Регистрация: 17.01.2010 / Сообщений: 516
Поблагодарили 525 раз(а) / Репутация: 523
Я бы рекомендовал такие ошибки отлавливать самостоятельно, не заглядывая в подсказку.
Подсказка - в прицепе
да я первый раз пробывал ).Спасибо за помощь. Кстати в чем ошибка я так и непонял (. Что за прицеп ?

Последний раз редактировалось oleg777; 27.10.2013 в 13:49.
Ответить


Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Выкл.
Pingbacks are Выкл.
Refbacks are Выкл.



Текущее время: 22:00. Часовой пояс GMT.


Перевод: zCarot
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
SEO by vBSEO