Всем здравствовать. Столкнулся с проблемой при написании советника, чувствую, что ошибка где-то на поверхности, а найти не могу. Буду благодарен если кто-нибудь подскажет.
Суть проблемы: поступила просьба дописать в один из советников трейлинг-стоп Игоря Кима, для нескольких позиций одновременно. Все добавил, а в результате получилась бяка :( Трал постоянно движется на расстоянии TStop.Sell и TStop.Buy пунктов от бида и аска, т.е. цена идет вверх, трал тоже вверх, цена вниз - трал вниз... Бригаду телепатов вызывать не надо, добавляемый код сам приведу :)
int start()
{
if(GetProfitOpenPosInCurrency(Symbol(),-1,MagicNumber)>=ProfitToStartTral) //если прибыль в валюте депозита больше заданной в настройках
{
CloseLoss(Symbol(),-1,MagicNumber);//закрываем все убыточные позы советника по текущему символу
start3();//запускаем трал
}
//бла-бла-бла, тут еще куча рабочего кода :)
}
Пользовательские функции:
void start3()
{
if (ShowComment) {
Comment(IIFs(AllSymbols, "AllSymbols ", "")
,"Magic="+IIFs(Magic<0, "Любой", DoubleToStr(Magic, 0))+" "
,IIFs(TSProfitOnly, "TSProfitOnly ", "")
,"TStop.Buy="+DoubleToStr(TStop.Buy, 0)+"п "
,"TStop.Sell="+DoubleToStr(TStop.Sell, 0)+"п "
,"TrailingStep="+DoubleToStr(TrailingStep, 0)+"п "
);
} elseComment("");
string sy=IIFs(AllSymbols, "", NULL);
SimpleTrailing(sy, -1, Magic);
}
//*********************************************************************//
void SimpleTrailing(string sy="", int op=-1, int mn=-1) {
double po, pp;
int i, k=OrdersTotal();
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
po=MarketInfo(OrderSymbol(), MODE_POINT);
if (mn<0 || OrderMagicNumber()==mn) {
if (OrderType()==OP_BUY) {
pp=MarketInfo(OrderSymbol(), MODE_BID);
if (!TSProfitOnly || pp-OrderOpenPrice()>TStop.Buy*po) {
if (OrderStopLoss()<pp-(TStop.Buy+TrailingStep-1)*po||OrderStopLoss()==0) {
ModifyOrder(-1, pp-TStop.Buy*po, -1);
}
}
}
if (OrderType()==OP_SELL) {
pp=MarketInfo(OrderSymbol(), MODE_ASK);
if (!TSProfitOnly || OrderOpenPrice()-pp>TStop.Sell*po) {
if (OrderStopLoss()>pp+(TStop.Sell+TrailingStep-1)*po || OrderStopLoss()==0) {
ModifyOrder(-1, pp+TStop.Sell*po, -1);
}
}
}
}
}
}
}
}
//****************************************************
string IIFs(bool condition, string ifTrue, string ifFalse) {
if (condition) return(ifTrue); else return(ifFalse);
}
Самый простой способ передачи в МТ через GlobalVariable примерно как буфер обмена. Один кладёт другой берёт.
Но, есть ещё масса вариантов, они по ситуации. Т.к. ситуации нет, говорить о вариантах сложно. Тестироваться будет на одном и том же символе.
GlobalVariable в справке чет не нашел MT,....
на счет вариантов. Расчет идет к примеру следующий, есть индикатор зигзага, мною в код зигзага добавлен код определяющий паттерны, типа If (условие ) если условие выполяется, переменной a =1 если не выполняется то а=0 . значение этой переменной мне и надо передать в другой индикатор, в код вида если переменная в таком то индикаторе была равна (а=1) делай следующее, если а=0 соответственно. Это что косеется передачи параметров между индикаторами.
ну и соответственно в такой же форме передать параметры от индикатора в советник. Но вопрос про советник вот какой, при тестировании в тестере, советник будет загружать индикатор для вычисления и передавать значения переменных в эксперта? или эе он будет ругаться что переменная недоступна так как она находиться в окружении индикатора !
Abzasc: Вызвать, как стандартный, например, iMA по короткому имени нельзя?
Ны вызвать можно, на это никаких ошибок не возникает, а вот параметр как передать? я делаю вызов, ставлю параметр в скобках какой вызываю) но в ответ ругань такого параметра несуществует в индикаторе.
На форексе практически все сервера бесплатные.
И даже более того, практически у каждого ДЦ есть демо-счета, на которых можно торговать виртуальными деньгами вместо настоящих.
Что такое Мargin CALL ( маржин колл)?
Margin Call – условие, при котором наступает принудительное закрытие позиции.
Это происходит, когда остаток на вашем счете (Equity) подошёл к нулю от cуммы необходимого залога (Margin) для суммы всех открытых позиций.
Операция происходит в автоматическом режиме. В некоторых компаниях маржин колл устанавливается на уровне 30% от залогового депозита.
Спасибо, можете дать плиз конкретную ссылку??! Гуглом найти не получается. СПС еще раз.
Все что вам необходимо это скачать и установить МетаТрейдер 4 любого брокера.
В программе нужно открыть Демо счет и можно начинать пользоваться. Все бесплатно. Брокера найдите через Google, их хватает.
Всем здравствовать. Столкнулся с проблемой при написании советника, чувствую, что ошибка где-то на поверхности, а найти не могу. Буду благодарен если кто-нибудь подскажет.
Суть проблемы: поступила просьба дописать в один из советников трейлинг-стоп Игоря Кима, для нескольких позиций одновременно. Все добавил, а в результате получилась бяка :( Трал постоянно движется на расстоянии TStop.Sell и TStop.Buy пунктов от бида и аска, т.е. цена идет вверх, трал тоже вверх, цена вниз - трал вниз... Бригаду телепатов вызывать не надо, добавляемый код сам приведу :)
Пользовательские функции:
Такой вопрос, можно ли передавать параметры указанные в коде индикатора ( не именно параметры самого индикатора) другому индикатору для обработки?
Вот второй вопрос, как передавать параметры из индикатора в советник, и как этот советник будет себя вести в режиме тестирования?
Заранее Спасибо!
Вы очень замысловато объясняете.
Самый простой способ передачи в МТ через GlobalVariable примерно как буфер обмена. Один кладёт другой берёт.
Но, есть ещё масса вариантов, они по ситуации. Т.к. ситуации нет, говорить о вариантах сложно. Тестироваться будет на одном и том же символе.
Вы очень замысловато объясняете.
Самый простой способ передачи в МТ через GlobalVariable примерно как буфер обмена. Один кладёт другой берёт.
Но, есть ещё масса вариантов, они по ситуации. Т.к. ситуации нет, говорить о вариантах сложно. Тестироваться будет на одном и том же символе.
GlobalVariable в справке чет не нашел MT,....
на счет вариантов. Расчет идет к примеру следующий, есть индикатор зигзага, мною в код зигзага добавлен код определяющий паттерны, типа If (условие ) если условие выполяется, переменной a =1 если не выполняется то а=0 . значение этой переменной мне и надо передать в другой индикатор, в код вида если переменная в таком то индикаторе была равна (а=1) делай следующее, если а=0 соответственно. Это что косеется передачи параметров между индикаторами.
ну и соответственно в такой же форме передать параметры от индикатора в советник. Но вопрос про советник вот какой, при тестировании в тестере, советник будет загружать индикатор для вычисления и передавать значения переменных в эксперта? или эе он будет ругаться что переменная недоступна так как она находиться в окружении индикатора !
Такой же вопрос. Как передать данные из одного нестандартного индикатора в другой?
Вы очень замысловато объясняете.
Самый простой способ передачи в МТ через GlobalVariable примерно как буфер обмена. Один кладёт другой берёт.
Но, есть ещё масса вариантов, они по ситуации. Т.к. ситуации нет, говорить о вариантах сложно. Тестироваться будет на одном и том же символе.
Вызвать, как стандартный, например, iMA по короткому имени нельзя?
Ны вызвать можно, на это никаких ошибок не возникает, а вот параметр как передать? я делаю вызов, ставлю параметр в скобках какой вызываю) но в ответ ругань такого параметра несуществует в индикаторе.