Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 750

 
noob1:
Здравствуйте. Подскажите, кто знает - пытаюсь рассчитывать StopLoss от low и high 1го бара, после выставления отложенного ордера, для buy и sell соответственно. Вот только результата ноль, одна ошибка 130 и все. Заранее спасибо. 
А тот ли тикет? Ну и расстояние до стоплосса может быть слишком маленьким.
 
simpleton:

Проверьте, не находится ли OrderOpenPrice() слишком близко к SL, и "с той ли стороны цены" ставятся стопы. Вот тут можно почитать:

Цены StopLoss и TakeProfit не могутрасполагаться слишком близко к рынку. Минимальное расстояние стопов впунктах можно получить, используя функцию MarketInfo() с параметром MODE_STOPLEVEL. В случае ошибочных, а также ненормализованных стопов генерируется ошибка 130 (ERR_INVALID_STOPS).

В данном случае, то есть, для отложенного ордера, "рынком" выступает его "отложенная цена открытия".

   Переделал, вроде пашет. Спасибо. 
 
Подскажите, каким образом из МТ узнать текущий ip адрес компьютера?
 
Heroix:
Подскажите, каким образом из МТ узнать текущий ip адрес компьютера?
WebRequest  на http://ipecho.net/plain и чтение из полученного файла. Или WinAPI.
 

В тестере стратегий команда MarketInfo(Symbol(),MODE_TICKVALUE) = 0 (!) Это происходит в ситуациях, когда, например, инструмент EURUSD а валюта баланса RUR     .... и в других сочетаниях. Я понял так, что валюта баланса должна совпадать с именем второй валюты в валютной паре. Иначе коменда дает значение НОЛЬ (в тестере стратегий) В результате невозможно проводить тестирование в желаемых сочетаниях. Как решить эту проблему?

 
ikatsko:

В тестере стратегий команда MarketInfo(Symbol(),MODE_TICKVALUE) = 0 (!) Это происходит в ситуациях, когда, например, инструмент EURUSD а валюта баланса RUR     .... и в других сочетаниях. Я понял так, что валюта баланса должна совпадать с именем второй валюты в валютной паре. Иначе коменда дает значение НОЛЬ (в тестере стратегий) В результате невозможно проводить тестирование в желаемых сочетаниях. Как решить эту проблему?

 

Выделенное неверно! У меня расчёт производится в евро с EURUSD, GBPUSD и др. Только при включении может дать 0, пока не поступили первые данные, поэтому перед вычислениями с TICKVALUE ставлю условие, что если != 0; 

А в тестере MarketInfo() может не работать, поэтому зная примерную цену тика проставляю её с условием IsTesting() || IsOptimization() || IsVisualMode().

 

Помогите пожалуйста пытаюсь создать сов торгуюший на  двух парах одновременно.

если по первой паре переменная будет так 

  double  a = NormalizeDouble(iOpen(NULL,PERIOD_CURRENT, 0), Digits);

то как будет по второй? 

 или код открытия сделок по первому символу так

  ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"",0,0,Green);

как будет выглядеть код второго символа

 
pavlicos:

Помогите пожалуйста пытаюсь создать сов торгуюший на  двух парах одновременно.

если по первой паре переменная будет так 

  double  a = NormalizeDouble(iOpen(NULL,PERIOD_CURRENT, 0), Digits);

то как будет по второй? 

 или код открытия сделок по первому символу так

  ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"",0,0,Green);

как будет выглядеть код второго символа

 

NULL или Symbol() значат пару графика. Для различения можно употребить string mySymbol = Symbol() и вешайте 2 копии советника на соответственные графики и присвойте различные магики для верности! Удачи!
 
pavlicos:

Помогите пожалуйста пытаюсь создать сов торгуюший на  двух парах одновременно.

если по первой паре переменная будет так 

  double  a = NormalizeDouble(iOpen(NULL,PERIOD_CURRENT, 0), Digits);

то как будет по второй? 

 или код открытия сделок по первому символу так

  ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"",0,0,Green);

как будет выглядеть код второго символа

 

// в OnTick()
double open_nzdusd_CUR=GetNormalizeOpenPriceBySymbol("NZDUSD",Period(),0);    // цена открытия текущей свечи NZDUSD
double open_audusd_M15=GetNormalizeOpenPriceBySymbol("AUDUSD",PERIOD_M15,1);  // цена открытия прошлой свечи AUDUSD на M15
//+------------------------------------------------------------------+

// функция вне тела OnTick()
//+------------------------------------------------------------------+
double GetNormalizeOpenPriceBySymbol(string sy, int timeframe, int shift) {
   int digits=(int)SymbolInfoInteger(sy,SYMBOL_DIGITS);
   return(NormalizeDouble(iOpen(sy,timeframe,shift),digits));
}
//+------------------------------------------------------------------+

С открытием вот лишь сама концепция:

string symbol="AUDUSD";
double ask=SymbolInfoDouble(symbol,SYMBOL_ASK);
double bid=SymbolInfoDouble(symbol,SYMBOL_BID);
double pt=SymbolInfoDouble(symbol,SYMBOL_POINT);
int spread=(int)SymbolInfoInteger(symbol,SYMBOL_SPREAD);
int digits=(int)SymbolInfoInteger(symbol,SYMBOL_DIGITS);
int value=(int)SymbolInfoInteger(symbol,SYMBOL_TRADE_STOPS_LEVEL);
int level=(value==0)?spread*2:value;
//---
double sl_b=(StopLoss==0)?0:NormalizeDouble(fmin(ask-StopLoss*pt,ask-(level+1)*pt),digits);
double tp_b=(TakeProfit==0)?0:NormalizeDouble(fmax(ask+TakeProfit*pt,ask+(level+1)*pt),digits);
ticket_b=OrderSend(symbol,OP_BUY,Lots,ask,3,sl_b,tp_b,"",0,0,clrGreen);
//---
double sl_s=(StopLoss==0)?0:NormalizeDouble(fmax(bid+StopLoss*pt,bid+(level+1)*pt),digits);
double tp_s=(TakeProfit==0)?0:NormalizeDouble(fmin(bid-TakeProfit*pt,bid-(level+1)*pt),digits);
ticket_s=OrderSend(symbol,OP_SELL,Lots,bid,3,sl_s,tp_s,"",0,0,clrRed);

без проверок кодов возврата торгового сервера.

 
Сегодня Навигатор в терминале  вдруг развернулся во всю ширину экрана, заслонив графики! Всегда был одинаковой шириной с Обзором рынка! Ищу и не нахожу, как его вернуть в прежние размеры! Помогите кто знает как справиться с новой напастью! Спасибо!
Причина обращения: