Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 1067
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Помогите, пожалуйста! Есть 2 файла: индикатора и советника. Как правильно обратиться к функции в индикаторе через #include? iCustom по разным причинам не подходит. Вот что написал в индикаторе:
А вот что в советнике:
Но советник почему то не работает, при тестировании индикатор не появляется в графике цены. Правильно ли все написал, а если есть ошибка, то где?
Тута.
А у меня нет такого. Но файл точно есть где то, я от туда получаю записанную информацию.
Помогите пожалуйста скомпилировать в мт4
Выдает ошибку 'FileClose' - expression of 'void' type is illegal TickToCVS~.mq4 84 12
А у меня нет такого. Но файл точно есть где то, я от туда получаю записанную информацию.
Это значение EMPTY_VALUE
Поищи где оно проскакивает.
На моём скрине видно что менюшка из МетаЕдитора, а твой скрин из МТ.
всем здрасте.ребята вопрос;ника не могу модифицировать ордер.тут два аспекта,плохо представляю математику модификации,обьясните популярно плиз
в моем понимании SL= IF ORDERSELEKT,Bid-ORDERSTOPLOS*POINT,DIGITS
второй аспект.учился по XBMS видео
как я не пробовал изменить значения переменных в тестере ерор 130 не правильный стоп лос и такая вот херь
2016.06.28 21:42:23.402 2016.06.23 00:00 торговля RSI inputs: Lots=0.1; Slippage=5; StopLoss=10; TakeProfit=30; RSIPeriod=7; Magic=1087;
хотя есть и умножения от digits и функция на случай не верного SL
extern double Lots = 0.1;
extern int Slippage = 10;
extern int StopLoss =10;
extern int TakeProfit =30;
extern int RSIPeriod = 7;
extern int Magic =1087;
double MaRSI;
int TP,SL;
bool tfu;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
if(Digits == 3||Digits == 5)
{
Slippage *= 10;
TakeProfit *= 10;
StopLoss *= 10;
}
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//+------------------------------------------------------------------+
//открытие селл
//+------------------------------------------------------------------+
MaRSI=iRSI(Symbol(),0, RSIPeriod,PRICE_CLOSE,1);
if(CountTrades() <= 0&&MaRSI<=30 )
{
if( SendOrder(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"тест",Magic,0,Green))
{ int ticket = OrderTicket();
SL = NormalizeDouble( Ask - StopLoss*Point,Digits);
TP = NormalizeDouble( Ask + TakeProfit*Point,Digits);
ModifyOrder(ticket,OrderOpenPrice(),SL,TP,0,Black);
}
}// if(CountTrades <= 0&&MaRSI>=70 )
//+------------------------------------------------------------------+
// открытие бай
//+------------------------------------------------------------------+
}//ONTICK
//+------------------------------------------------------------------+
//+счетчик ордеров
//+------------------------------------------------------------------+
int CountTrades ()
{
int count = 0;
for(int i = OrdersTotal()-1;i>=0;i--)
{
if( OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)//если ордер наш
count++;//увеличиваем счетчик
}//выбираем ордер по индексу
}//фор.i==первому любому ордеру.
return(count);//возвращает количество ордеров
}//функция
//+------------------------------------------------------------------+
//функция установки ордеров с обработкой ошибок
//+------------------------------------------------------------------+
int SendOrder( string symbol,int cmd,double volume,double price,int slippage,double stoploss,
double takeprofit,string comment,int magic=0,datetime expiration=0,color arrow_color=CLR_NONE)
{
int err = GetLastError();
err =0;
bool exit_cikl = false;
int ticket = -1;
int Retry = 10;//количество попыток установить ордер
int cnt = 0; //счетчик попыток
if(cmd == OP_BUY || cmd == OP_SELL)
{
while(!exit_cikl)
{
ticket = OrderSend(symbol, cmd, volume, price, slippage, stoploss,takeprofit,comment, magic, expiration,arrow_color);
err= GetLastError();
switch(err)
{
case ERR_NO_ERROR:
exit_cikl = true;
break;
case ERR_SERVER_BUSY:
case ERR_NO_CONNECTION:
case ERR_INVALID_PRICE:
case ERR_OFF_QUOTES:
case ERR_BROKER_BUSY:
case ERR_TRADE_CONTEXT_BUSY:
cnt++;
break;
case ERR_PRICE_CHANGED:
case ERR_REQUOTE:
RefreshRates();
continue;
default:
exit_cikl = true;
break;
}//переключатель свич switch(err)
if(cnt > Retry)
exit_cikl = true;
if(!exit_cikl)
{
Sleep(1000);
RefreshRates();
}//если не выходим из цикла if(!exit_cikl)
else
{
if(err != ERR_NO_ERROR)
{
Print("Ошибка : " + IntegerToString(err));
}//если все же осталась какая то ошибка if(err != ERR_NO_ERROR)
}//В ПРОТИВНОМ СЛУЧАЕ
if(err==ERR_NO_ERROR)
{
if( OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)==true)
return(ticket);
}// if(err==ERR_NO_ERROR)
Print("Ошибка открытия ордера после " + IntegerToString(cnt) +"попыток");
return(-1);
}//цикл while
}//если тип ордера бай или сел
return(ticket);
}//функция SendOrder
//-------------------------------------------------------------------------------------------------------------
//функция модифи ордер
//------------------------------------------------------------------------------------------------------------
bool ModifyOrder(int ticket, double price,double stoploss,double takeprofit,datetime expiration,color arrow_color)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
{
price = NormalizeDouble(price,Digits);
stoploss = NormalizeDouble(stoploss,Digits);
takeprofit = NormalizeDouble(takeprofit,Digits);
CheckValidStop(Symbol(),price,stoploss);//функция изменения минимального стопа
int err = GetLastError();
err = 0 ;
int Retry = 10;
int cnt = 0;
bool exit_cikl = false;
bool result;
while(!exit_cikl)
{
result = OrderModify(ticket, price,stoploss,takeprofit,expiration, arrow_color);
err = GetLastError();
if(result == true)
{
Print("Ордер № "+ IntegerToString(ticket), "успешно модифицирован");
return(true);
}
switch(err)
{
case ERR_NO_ERROR:
exit_cikl = true;
break;
case ERR_SERVER_BUSY:
case ERR_NO_CONNECTION:
case ERR_INVALID_PRICE:
case ERR_OFF_QUOTES:
case ERR_BROKER_BUSY:
case ERR_TRADE_CONTEXT_BUSY:
cnt++;
break;
case ERR_PRICE_CHANGED:
case ERR_REQUOTE:
RefreshRates();
continue;
default:
exit_cikl = true;
break;
}//переключатель свич switch(err)
}// while(!exit_cikl)
if ( err != ERR_NO_ERROR)
{
Print("Ошибка модификации ордера № " + IntegerToString(ticket));
Print("Код ошибки: " + IntegerToString(err));
}
}//if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
else
{
Print("Не удалось выбрать ордер,ticket = " + IntegerToString(ticket));
return(false);
}//если что то не так
return(true);
}//функция модифи
//----------------------------------------------------------------------------------------------------
//ChtckValidStop
//--------------------------------------------------------------------------------------------------
void CheckValidStop(string symbol,double price,double& sl)
{
if(sl==0)
return;
double min_stop_server = MarketInfo(symbol,MODE_STOPLEVEL)*MarketInfo(symbol,MODE_POINT);
if(MathAbs(price-sl) <= min_stop_server)
{
if(price>sl)
sl = price - min_stop_server;
else sl = sl + min_stop_server;
}/// if(MathAbs(price-sl) <= min_stop_server)
sl = NormalizeDouble(sl,MarketInfo(symbol,MODE_DIGITS));
}//функция
ПОДСКАЖИТЕ ПОЖАЛУЙСТА!!!
В торговой истории есть два ордера: 1) SELL №тик 415 STOPLOSS 1.1000 лот 0.01 2) SELL №тик 418 STOPLOSS 1.1000 лот 0.02
Мне нужно присвоить переменным: Х=№тик, У=STOPLOSS и В=лот если цена Аsk равна STOPLOSS ордера SELL. Как присвоить переменным сначала значения по первому ордеру а потом по второму. У меня всегда присваивает значение по первому.
ПОДСКАЖИТЕ ПОЖАЛУЙСТА!!!
В торговой истории есть два ордера: 1) SELL №тик 415 STOPLOSS 1.1000 лот 0.01 2) SELL №тик 418 STOPLOSS 1.1000 лот 0.02
Мне нужно присвоить переменным: Х=№тик, У=STOPLOSS и В=лот если цена Аsk равна STOPLOSS ордера SELL. Как присвоить переменным сначала значения по первому ордеру а потом по второму. У меня всегда присваивает значение по первому.
Тут помогают тем, у кого уже что-то написано, но работает не так, как надо. Приведите свой код, чтобы здесь присутствующие могли увидеть что не так и помочь.
А если вы хотите, чтобы вам написали на заказ, то это туда.