Проклятая ошибка 130 к черту - страница 2

 
cloudbreaker wrote >>

Я могу категорически заявить, что Seawolf и Ruptor говорят из своего коллективного заднего прохода.

Для ордера OP_BUY вы абсолютно правы, используя цену Ask для создания цены входа и стопов.

На самом деле, Seawolf и Ruptor правы.

Вы вводите длинный ордер по цене ASK и выходите по BID, обратная ситуация для ордера на продажу. Поскольку стоп-лосс или тейк-профит - это выход, вам нужно использовать цену BID для их расчета по длинному ордеру.

Это довольно распространенная путаница, которую часто упускают из виду, особенно при работе с небольшими спредами, поскольку разница между ценой ASK и BID невелика. Иногда код будет работать просто отлично, если ваши стопы и проскальзывание не слишком жесткие, но если вы занимаетесь скальпингом или делаете что-то еще, что требует точности, то вам нужно использовать эти рекомендации для правильного определения цены на входе. и выход.

-

Для длинного ордера, т.е. OP_BUY, OP_BUYSTOP или OP_BUYLIMIT:

Цена входа = ASK

Цена выхода (стоп-лосс, тейк-профит или OrderClose(...) ) = BID

-

Для короткого ордера, т.е. OP_SELL, OP_SELLSTOP или OP_SELLLIMIT:

Цена входа = BID

Цена выхода (стоп-лосс, тейк-профит или OrderClose(...) ) = ASK

-

Tovan

 
tovan:

На самом деле, Seawolf и Ruptor правы.

Вы вводите длинный ордер по цене ASK и выходите по BID, обратная ситуация для ордера на продажу. Поскольку стоп-лосс или тейк-профит - это выход, вам нужно использовать цену BID для их расчета по длинному ордеру.

Это довольно распространенный момент, который часто упускается из виду, особенно при работе с небольшими спредами, поскольку разница между ценой ASK и BID невелика. Иногда код будет работать просто отлично, если ваши стопы и проскальзывание не слишком жесткие, но если вы занимаетесь скальпингом или делаете что-то еще, что требует точности, то вам нужно использовать эти рекомендации для правильного определения цены на входе в рынок. и выход.

-

Для длинного ордера, т.е. OP_BUY, OP_BUYSTOP или OP_BUYLIMIT:

Цена входа = ASK

Цена выхода (стоп-лосс, тейк-профит или OrderClose(...) ) = BID

-

Для короткого ордера, т.е. OP_SELL, OP_SELLSTOP или OP_SELLLIMIT:

Цена входа = BID

Цена выхода (стоп-лосс, тейк-профит или OrderClose(...) ) = ASK

-

Tovan

Понял, я вижу, что именно вы имеете в виду - и приношу свои скромные извинения Seawolf и Ruptor.

Когда я закрываю ордера обычным образом или использую свой собственный скрытый стоплосс (который просто вызывает мою обычную функцию закрытия ордеров), я полностью осознаю, что должен использовать Bid для OP_BUYs и Ask для OP_SELLs.

Однако при открытии ордеров я всегда просто использовал цены входа в качестве базовой линии для расчета стоплосса и никогда не сталкивался с проблемами. Я понимаю, как комбинация свободного спреда и жесткого стопа может привести к ошибке недействительных стопов.

Я бы добавил, что есть чертовски много образцов, которые делают это так же, как и я.

Если у нас нет жестких стопов, я полагаю, что единственная разница между этими двумя методами, которую большинство из нас почувствует, будет в фактических заработанных или потерянных деньгах, хотя, поскольку оба типа ордеров будут остановлены "на сумму спреда раньше", они будут иметь тенденцию нивелировать друг друга, если спред достаточно стабилен.

Правильна ли эта логика?

 
cloudbreaker wrote >>

Понятно, я вижу, что вы имеете в виду - и приношу свои смиренные извинения Seawolf и Ruptor.

Когда я закрываю ордера обычным образом или использую свой собственный скрытый стоплосс (который просто вызывает мою обычную функцию закрытия ордеров), я полностью осознаю, что должен использовать Bid для OP_BUYs и Ask для OP_SELLs.

Однако, открывая свои ордера, я всегда использовал цены входа в качестве базовой линии для расчета стоплосса и никогда не сталкивался с проблемами. Я понимаю, как комбинация свободного спреда и жесткого стопа может привести к ошибке недействительных стопов.

Я бы добавил, что существует чертовски много образцов, которые делают это так же, как и я.

Если у нас нет жестких стопов, я полагаю, что единственная разница между этими двумя методами, которую большинство из нас почувствует, будет заключаться в фактическом заработке или потере денег, хотя, поскольку оба типа ордеров будут остановлены "на сумму спреда раньше", они будут иметь тенденцию нивелировать друг друга, если спред достаточно стабилен.

Является ли эта логика здравой?

Хорошие замечания. Я согласен, что есть много других советников, которые делают это так, как вы предложили.

Это иллюстрирует некоторые различия во взглядах на стоп-лосс, которые мы принимаем в зависимости от того, как работают наши советники. Я, например, склонен устанавливать стоп-лосс довольно жестко. Поэтому меня, как правило, больше волнует то, где ордер не сработает, чем то, сколько я потеряю, если он сработает. С другой стороны, если вас больше интересует, что вы потеряете (или выиграете), когда ордер закроется, тогда имеет смысл делать все расчеты по цене открытия, а не по цене закрытия. Это становится проблемой только в том случае, если ваш стоп-лосс или тейк-профит очень жесткий (в пределах нескольких пунктов, в зависимости от пары). В этом случае советнику потребуется дополнительная проверка с помощью MODE_STOPLEVEL (как вы предложили выше), чтобы убедиться, что вы действительно можете завершить сделку.

Я говорил в основном с пуристской позиции, но я могу увидеть несколько веских аргументов в пользу того, чтобы использовать оба варианта.

- Tovan

 
tovan:

Хорошие замечания. Я согласен, что есть много других советников, которые делают это так, как вы предложили.

Это иллюстрирует некоторые различия во взглядах на стоп-лосс, которые мы принимаем, исходя из того, как работают наши советники. Я, например, склонен устанавливать стоп-лосс довольно жестко. Поэтому меня, как правило, больше волнует то, где ордер не сработает, чем то, сколько я потеряю, если он сработает. С другой стороны, если вас больше интересует, что вы потеряете (или выиграете), когда ордер закроется, тогда имеет смысл делать все расчеты по цене открытия, а не по цене закрытия. Это становится проблемой только в том случае, если ваш стоп-лосс или тейк-профит очень жесткий (в пределах нескольких пунктов, в зависимости от пары). В этом случае советнику потребуется дополнительная проверка с помощью MODE_STOPLEVEL (как вы предложили выше), чтобы убедиться, что вы действительно можете завершить сделку.

Я говорил в основном с пуристской позиции, но я могу увидеть несколько веских аргументов в пользу того, чтобы использовать оба способа.

- Тован

Tovan, правильно ли это, потому что я также получаю ошибку 130

if(OrderType()==OP_SELL && OrderSymbol()==Symbol())
{
if (OrderStopLoss()==0)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
}
if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
{
if(OrderStopLoss()>(Ask+Point*TrailingStop)+Point)
{
if(!OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red))
Print("Error_Modify - ",GetLastError());
else str=StringConcatenate("\n Номер моего билета - ", OrderTicket(), " и моя установка стоп-лосса - ", DoubleToStr(Ask+Point*TrailingStop,Digits)); // новый код
} }
}
}
if(OrderType()==OP_BUY && OrderSymbol()==Symbol())
{
if (OrderStopLoss()==0)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
}

if(Bid-OrderOpenPrice()>Point*TrailingStop)
{
if(OrderStopLoss()<Bid-Point*TrailingStop-Point)
{
if(!OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green))
Print("Error_Modify - ",GetLastError());
else str=StringConcatenate("\n Номер моего билета ", OrderTicket(), " и мой стоп-лосс ", DoubleToStr(Bid-Point*TrailingStop,Digits)); // новый код
}

}


Связана ли ошибка 130 с входом и выходом - или это может быть из-за проскальзывания?

 

На самом деле, кажется, что все вы немного запутались. Некоторые из вас путают две совершенно разные вещи.

Вопросы, которые следует задать, следующие:

1) По какой цене исполняются ордера на покупку и продажу TP и SL. Bid или Ask?

2) Какую цену мы используем для расчета TP и SL для покупки и продажи. Bid или Ask?

tovan wrote >>

На самом деле, Seawolf и Ruptor правы.

Вы входите в длинный ордер по цене ASK, а выходите по BID, обратная ситуация для ордера на продажу.

//---VANGROSH --- Правильно, но запутанно. Лучше сказать, что ваш длинный ордер TP или SL будет исполнен, когда цена TP или SL == цене BID. Это то, что вы видите, когда наблюдаете, как ваш ордер достигает TP или SL, но это не имеет никакого отношения к тому, как вы рассчитываете эти цены.

.

Поскольку стоп-лосс или тейк-профит - это выход, вам нужно использовать цену BID для их расчета по длинному ордеру.

//---VANGROSH--- Извините, это неправильно. Вы путаете то, что вы ВИДИТЕ - какая цена вызовет выход, с тем, какую цену вы используете для расчета цен TP и SL.

Просто немного подумайте. Возьмем ордер на покупку. Вы все согласны, что мы покупаем по цене ASK - нет проблем. Допустим, TP ордера на покупку составляет 15 пунктов, а спред - 5 пунктов. Если вы установите TP на 15 пунктов выше цены BID, то ваш TP составит только 10 пунктов, потому что спред находится НИЖЕ ASK и ВЫШЕ цены BID. Не имеет смысла рассчитывать 15 пунктов TP от цены на 5 пунктов НИЖЕ цены входа (ASK). Вы всегда должны рассчитывать TP или SL от цены, по которой вы ввели ордер. ASK для BUY, BID для SELL.

Это легко, если вы просто подумаете, по какой цене будет достигнут ваш TP или SL. По ордеру BUY, входящему по цене ASK, по какой цене будет срабатывать ваш TP? По цене BID. Если ваш TP был на уровне 1.2450 и вы установили TP от цены ASK, то когда линия ASK находится на уровне 1.2450, вы только начинаете выплачивать спред. Только когда линия BID будет на уровне 1.2450, ваш TP будет достигнут, и ваш ордер закроется с прибылью в 15 пунктов.

То же самое с SL. Если ваш SL равен 30 пунктам, это означает 30 пунктов от цены входа. При покупке ценой входа является ASK. Если вы используете цену BID - 30 пунктов, то вы исключаете спред в SL, поэтому ваш реальный SL будет 35 пунктов от цены входа (ASK), потому что цена BID на 5 пунктов ниже (спред) цены ASK. Вы получите 35 пунктов SL, потому что ваша ЦЕНА SL теперь на 35 пунктов ниже вашей ЦЕНЫ ВХОДА, которая была для ордера на покупку?

Я занимаюсь этим всего несколько месяцев, и мне помогло то, что я просто наблюдал, по какой цене TP и SL бьются при ручной торговле, а затем для своего первого советника я просто дважды проверил линии TP и SL на открытом ордере советника с помощью инструмента перекрестия, а также проверил цены TP и SL на некоторых закрытых ордерах советника, чтобы убедиться, что точки TP и SL были точными.

Единственный раз, когда вам нужно сделать по-другому, это для трейлинг-стопа. Для ордера на покупку вы используете цену BID.

if(Bid-OrderOpenPrice() > Point*_trailingStop) StopLoss = Bid-Point*_trailingStop;

Потому что вы хотите, чтобы ваш TS был на X пунктов ниже цены, которая закроет ордер, если его пробьют, что является ценой BID.

Для продажи вы используете ASK.

if(OrderOpenPrice()-Ask > Point*_trailingStop) StopLoss = Ask+Point*_trailingStop;

Потому что вы хотите, чтобы ваш TS был на X пунктов выше цены, при достижении которой ордер будет закрыт, что является ценой ASK.

Помните, что именно цена BID закроет ваши ордера BUY TP и SL,

И это цена ASK, которая закроет ваши ордера SELL TP и SL.

 
vangrosh:

На самом деле, кажется, что все вы немного запутались. Некоторые из вас путают две совершенно разные вещи.

Вопросы, которые следует задать, следующие:

1) По какой цене исполняются ордера на покупку и продажу TP и SL. Bid или Ask?

2) Какую цену мы используем для расчета TP и SL для покупки и продажи. Bid или Ask?

Просто подумайте об этом немного. Возьмем ордер на покупку. Вы все согласны, что мы покупаем по цене ASK - нет проблем. Допустим, TP ордера на покупку составляет 15 пунктов, а спред - 5 пунктов. Если вы установите TP на 15 пунктов выше цены BID, то ваш TP составит только 10 пунктов, потому что спред находится НИЖЕ ASK и ВЫШЕ цены BID. Не имеет смысла рассчитывать 15 пунктов TP от цены на 5 пунктов НИЖЕ цены входа (ASK). Вы всегда должны рассчитывать TP или SL от цены, по которой вы ввели ордер. ASK для BUY, BID для SELL.

Это легко, если вы просто подумаете, по какой цене будет пробит ваш TP или SL. По ордеру BUY, вошедшему по цене ASK, по какой цене будет сбит ваш TP? По цене BID. Если ваш TP был на уровне 1.2450, и вы установили TP от цены ASK, то когда линия ASK находится на уровне 1.2450, вы только начинаете выплачивать спред. Только когда линия BID будет на уровне 1.2450, ваш TP будет достигнут, и ваш ордер закроется с прибылью в 15 пунктов.

То же самое с SL. Если ваш SL равен 30 пунктам, это означает 30 пунктов от цены входа. При покупке ценой входа является ASK. Если вы используете цену BID - 30 пунктов, то вы исключаете спред из SL, поэтому ваш реальный SL будет 35 пунктов от цены входа (ASK), потому что цена BID на 5 пунктов ниже (спред) цены ASK. Вы получите 35 пунктов SL, потому что ваша ЦЕНА SL теперь на 35 пунктов ниже вашей ЦЕНЫ ВХОДА, которая была для ордера на покупку?

Я занимаюсь этим всего несколько месяцев, и мне помогло то, что я просто наблюдал, по какой цене TP и SL достигаются при ручной торговле, а затем для своего первого советника я просто дважды проверил линии TP и SL на открытом ордере советника с помощью инструмента перекрестия, а также проверил цены TP и SL на некоторых закрытых ордерах советника, чтобы убедиться, что точки TP и SL были точными.

Единственный раз, когда вам нужно сделать по-другому, это для трейлинг-стопа. Для ордера на покупку вы используете цену BID.

if(Bid-OrderOpenPrice() > Point*_trailingStop) StopLoss = Bid-Point*_trailingStop;

Потому что вы хотите, чтобы ваш TS был на X пунктов ниже цены, которая закроет ордер, если он будет достигнут, что является ценой BID.

Для продажи вы используете ASK.

if(OrderOpenPrice()-Ask > Point*_trailingStop) StopLoss = Ask+Point*_trailingStop;

Потому что вы хотите, чтобы ваш TS был на X пунктов выше цены, которая закроет ордер при достижении, что является ценой ASK.

Помните, что именно цена BID закроет ваши ордера BUY TP и SL,

И именно цена ASK закроет ваши ордера SELL TP и SL.

Vangrosh

спасибо за информацию

Не могли бы вы помочь мне понять

правильно ли это

я делаю советника с автоматическим трейлом


if(OrderType()==OP_SELL && OrderSymbol()==Symbol())

{
if (OrderStopLoss()==0)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red); // размещаем TP и SL
}
if((OrderOpenPrice()-Ask)>(Point*TrailingStop)) // размещаем TP
{
if(OrderStopLoss()>(Ask+Point*TrailingStop)+Point) // проверяем true
{
if(!OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red)) // если true модифицировать ордер
Print("Error_Modify - ",GetLastError());
else str=StringConcatenate("\n My ticket number is ", OrderTicket(), " and my stop loss setting is ", DoubleToStr(Ask+Point*TrailingStop,Digits)); // новый код
} }
}
}
 
vangrosh:

На самом деле, кажется, что все вы немного запутались. Некоторые из вас путают две совершенно разные вещи.

Вопросы, которые следует задать, следующие:

1) По какой цене исполняются ордера на покупку и продажу TP и SL. Bid или Ask?

2) Какую цену мы используем для расчета TP и SL для покупки и продажи. Bid или Ask?

Просто обдумайте это немного. Возьмем ордер на покупку. Вы все согласны, что мы покупаем по цене ASK - нет проблем. Допустим, TP по ордеру на покупку составляет 15 пунктов, а спред - 5 пунктов. Если вы установите TP на 15 пунктов выше цены BID, то ваш TP составит только 10 пунктов, потому что спред находится НИЖЕ ASK и ВЫШЕ цены BID. Не имеет смысла рассчитывать 15 пунктов TP от цены на 5 пунктов НИЖЕ цены входа (ASK). Вы всегда должны рассчитывать TP или SL от цены, по которой вы ввели ордер. ASK для BUY, BID для SELL.

Все просто, если вы просто подумаете, по какой цене будет исполнен ваш TP или SL. По ордеру BUY, входящему по цене ASK, по какой цене будет сбит ваш TP? По цене BID. Если ваш TP был на уровне 1.2450, и вы установили TP от цены ASK, то когда линия ASK находится на уровне 1.2450, вы только начинаете выплачивать спред. Только когда линия BID будет на уровне 1.2450, ваш TP будет достигнут, и ваш ордер закроется с прибылью в 15 пунктов.

То же самое с SL. Если ваш SL равен 30 пунктам, это означает 30 пунктов от цены входа. При покупке ценой входа является ASK. Если вы используете цену BID - 30 пунктов, то вы исключаете спред в SL, поэтому ваш реальный SL будет 35 пунктов от цены входа (ASK), потому что цена BID на 5 пунктов ниже (спред) цены ASK. Вы получите 35 пунктов SL, потому что ваша ЦЕНА SL теперь на 35 пунктов ниже вашей ЦЕНЫ ВХОДА, которая была для ордера на покупку?

Я занимаюсь этим всего несколько месяцев, и мне помогло то, что я просто наблюдал, по какой цене TP и SL бьются при ручной торговле, а затем для своего первого советника я просто дважды проверил линии TP и SL на открытом ордере советника с помощью инструмента перекрестия, а также проверил цены TP и SL на некоторых закрытых ордерах советника, чтобы убедиться, что точки TP и SL были точными.

Единственный раз, когда вам нужно сделать по-другому, это для трейлинг-стопа. Для ордера на покупку вы используете цену BID.

if(Bid-OrderOpenPrice() > Point*_trailingStop) StopLoss = Bid-Point*_trailingStop;

Потому что вы хотите, чтобы ваш TS был на X пунктов ниже цены, которая закроет ордер, если его пробьют, что является ценой BID.

Для продажи вы используете ASK.

if(OrderOpenPrice()-Ask > Point*_trailingStop) StopLoss = Ask+Point*_trailingStop;

Потому что вы хотите, чтобы ваш TS был на X пунктов выше цены, которая закроет ордер, если он будет достигнут, что является ценой ASK.

Помните, что именно цена BID закроет ваши ордера BUY TP и SL,

И это цена ASK, которая закроет ваши ордера SELL TP и SL.

Vangrosh, как я уже говорил в своем ответе Товану, если вы точно знаете, что делаете, вы можете делать это любым способом. Мы далеко не запутались.

То есть, учитывая, что вы знаете цену входа, стоп-лимит брокера и спред, вы можете достичь желаемого "абсолютного" стоплосса (который не будет давать 130 ошибок!), сделав его "относительным" либо к ask, либо к bid и корректируя его по мере необходимости.

Кстати, я предпочитаю делать это так, как вы описали.

 
cloudbreaker wrote >>

Вангрош, как я уже упоминал в своем ответе Товану, если вы точно знаете, что делаете, вы можете делать это любым способом. Мы далеко не запутались.

То есть, учитывая, что вы знаете цену входа, стоп-лимит брокера и спред, вы можете достичь желаемого "абсолютного" стоплосса (который не будет давать 130 ошибок!), сделав его "относительным" либо к ask, либо к bid и корректируя его по мере необходимости.

Я, кстати, предпочитаю делать это так, как вы описали.

Ну, Seawolf сказал: "Правило большого пальца... если вы входите на ask, вы выходите на bid, если вы входите на bid, вы выходите на ask".

Это не путаница? Я не имею в виду, что он запутался, я имею в виду, что мне не ясен контекст, в котором он говорит. Его эмпирическое правило неверно, если он говорит о расчете выходов. Когда я говорю "запутался", я не имею в виду, что вы, ребята, не знаете, что делаете, или что вы не можете сделать это по-другому - на самом деле я хотел сказать, что способ, которым они давали инструкции, был запутанным. Например, приведенная выше цитата из Seawolf верна, если он говорит о том, в какой ценовой точке выходят ордера в MT. Я думаю, что для тех, кто только учится этому, вы должны очень четко понимать, к какому контексту вы обращаетесь, потому что есть два основных контекста, когда вы учите о TP и SL.

1) Контекст или точка зрения, которая фокусируется на том, по какой цене (Bid или Ask) будут достигнуты TP и SL открытого ордера - это одна из первых вещей, которые мне нужно было изучить для ручной торговли...

2) Контекст или точка зрения, которая фокусируется НЕ на #1 выше, а на том, какую цену (Bid или Ask) мы используем для расчета TP и SL, ЕСЛИ мы хотим, чтобы наши цены TP и SL были точными и включали спред.

Послушайте, я тоже новичок в этом деле, и мне и другим новичкам легко запутаться, если вещи представлены нам в таком виде, что контекст не очень понятен.

И я, например, не знал в начале, что существует более чем один контекст, в котором можно рассматривать TP и SL и многие другие вещи, которые мы должны понимать.

cloudbreaker wrote>>Вангрош, как я уже упоминал в своем ответе Товану, пока вы точно знаете, что делаете, вы можете делать это любым способом.

Вот почему я пытался быть настолько ясным и в контексте, насколько мог, в своем сообщении. Люди, которые только учатся, как я, не знают точно, что мы делаем, поэтому нас нужно учить вещам в их правильном контексте.

По моему опыту, кажется, что много раз нам предлагают знания, которых у нас еще нет. Сначала нам нужно узнать основные правила, а затем получить некоторый опыт. Только после этого мы узнаем, какие "правила" мы можем нарушать или отступать от них.

Кстати, я не имел в виду вас в своем сообщении. Мне показалось, что ваши ответы были наиболее ясными и точными. И, рискуя показаться "лижущим задницу", когда дело доходит до получения самых ясных и точных ответов на этом форуме, ваши сообщения - одни из тех, которые я ищу в первую очередь. На этом форуме есть только 4 или 5 человек, которые, как я обнаружил, оказались более точными, и вы можете сказать, что они действительно имеют больше, чем просто небольшой опыт за плечами.

 
vangrosh:

Ну, Seawolf сказал: "Правило большого пальца... если вы входите по ask, вы выходите по bid, если вы входите по bid, вы выходите по ask".

Это не путаница? Я не имею в виду, что он запутался, я имею в виду, что мне не ясен контекст, в котором он говорит. Его эмпирическое правило неверно, если он говорит о расчете выходов. Когда я говорю "запутался", я не имею в виду, что вы, ребята, не знаете, что делаете, или что вы не можете сделать это по-другому - на самом деле я хотел сказать, что способ, которым они давали инструкции, был запутанным. Например, приведенная выше цитата из Seawolf верна, если он говорит о том, в какой ценовой точке выходят ордера в MT. Я думаю, что для тех, кто только учится этому, вы должны очень четко представлять, к какому контексту вы обращаетесь, потому что есть два основных контекста, когда вы учите о TP и SL.

1) Контекст или точка зрения, которая фокусируется на том, по какой цене (Bid или Ask) будут достигнуты TP и SL открытого ордера - это одна из первых вещей, которые мне нужно было изучить для ручной торговли...

2) Контекст или точка зрения, которая фокусируется НЕ на #1 выше, а на том, какую цену (Bid или Ask) мы используем для расчета TP и SL, ЕСЛИ мы хотим, чтобы наши цены TP и SL были точными и включали спред.

Послушайте, я тоже новичок в этом деле, и мне и другим новичкам легко запутаться, если вещи представлены нам в таком виде, что контекст не очень понятен.

И я, например, не знал в начале, что существует более чем один контекст, в котором можно рассматривать TP и SL и многие другие вещи, которые мы должны понимать.

cloudbreaker wrote>>Вангрош, как я уже упоминал в своем ответе Товану, пока вы точно знаете, что делаете, вы можете делать это любым способом.

Вот почему я пытался быть настолько ясным и в контексте, насколько мог, в своем сообщении. Люди, которые только учатся, как я, не знают точно, что мы делаем, поэтому нас нужно учить вещам в их правильном контексте.

По моему опыту, кажется, что много раз нам предлагают знания, которых у нас еще нет. Сначала нам нужно узнать основные правила, а затем получить некоторый опыт. Только после этого мы узнаем, какие "правила" мы можем нарушать или отступать от них.

Кстати, я не имел в виду вас в своем сообщении. Мне показалось, что ваши ответы были наиболее ясными и точными. И, рискуя показаться "лижущим задницу", когда дело доходит до получения самых ясных и точных ответов на этом форуме, ваши сообщения - одни из тех, которые я ищу в первую очередь. На этом форуме есть только 4 или 5 человек, которые, как я обнаружил, оказались более точными, и вы можете сказать, что они действительно имеют больше, чем просто небольшой опыт за плечами.

Спасибо за комплимент; очень признателен.

Когда я сказал, что мы не запутались, я действительно говорил только за себя и Тована, поскольку мы, похоже, работаем на одной волне.

Прошу прощения, если мое сообщение показалось резким; это, конечно, не имелось в виду, и я не чувствовал себя таким в тот момент (хотя у меня бывают моменты...).

Мой общий подход к этому форуму (когда я сам не ищу помощи) заключается в том, чтобы изо всех сил стараться помочь тем, кто пытается освоить навыки программирования. У меня действительно нет времени на тех, кто хочет, чтобы все было сделано за них, просто приходя на форум со своим первым сообщением под заголовком "Мне нужен успешный советник". Именно из-за таких людей, как вы, мне здесь интересно, и вы, вероятно, знаете о торговле на Форекс больше, чем я.

Немного предыстории - я был программистом с начала 1980-х годов, но несколько лет назад бросил это занятие, чтобы работать пилотом коммерческого вертолета. Однако, учитывая отсутствие полетов в моей компании в этом году, я пишу советников для своего друга, который владеет начинающей исследовательской компанией. Мы используем подход к торговле, основанный на теории хаоса (а не на знании рынка), и уже очень прибыльно торгуем советниками от имени известного хедж-фонда. Мне это очень нравится!

Удачи.

 
delcor wrote >>

Вангрош

спасибо за информацию

не могли бы вы помочь мне понять

правильно ли это

я делаю советник с автоматическим трейлом

if(OrderType()==OP_SELL && OrderSymbol()==Symbol())

{
if (OrderStopLoss()==0)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red); // устанавливаем TP и SL}

Вы должны установить ваши базовые TP и SL, когда вы отправляете свой ордер, или же сделать вышеуказанную строку только один раз. Если вы выполняете вышеприведенную строку

на каждом тике, то вы также получите ошибку 1 OrderModify, которая произойдет, когда существующее значение SL будет одинаковым.

как новые - значит, цена еще не изменилась - SL тот же, что и раньше.
if((OrderOpenPrice()-Ask)>(Point*TrailingStop)) // ставим TP

{
if(OrderStopLoss()>(Ask+Point*TrailingStop)+Point) // проверяем true

Это выглядит нормально. И я думаю, что то, что вы делаете, добавляя точку (+Point) - хорошая идея. Я делаю то же самое

но в другом месте и другим способом, но это для решения другой проблемы, проблемы, которую вы можете получить, когда сравнение двойников не работает правильно, поэтому вы добавляете

точку, чтобы убедиться, что цена больше или меньше - иначе ваш трейлинг-стоп иногда не будет исполнен.

Остальное кажется правильным.
{

if(!OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red)) // если true, модифицируем ордер
Print("Error_Modify - ",GetLastError());
else str=StringConcatenate("\n Мой номер билета ", OrderTicket(), " и моя установка стоп-лосса ", DoubleToStr(Ask+Point*TrailingStop,Digits)); // новый код
}
}
}

Вот пример трейлинг-стопа из MQ EA MACD Sample.mq4

              // check for trailing stop
              if( TrailingStop>0)  
              {                 
                 if((OrderOpenPrice()-Ask)>(Point* TrailingStop))
                 {
                    if((OrderStopLoss()>(Ask+Point* TrailingStop)) || (OrderStopLoss()==0))
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point* TrailingStop,OrderTakeProfit(),0,Red);
                     return(0);
                    }
                 }
              }

Но я обнаружил, что получаю ошибки от этого кода из-за известной проблемы, когда при сравнении парных цен, как описано выше, ваш пункт greater then > иногда оценивается как TRUE

даже если цены абсолютно одинаковы - вы печатаете() цены и они одинаковы. Вы можете выполнить поиск по сопоставлению парных значений, чтобы узнать подробности. Существуют обходные пути, такие как функция CompareDoubles(), найденная в stdlib.mq4 (в папке libraries), или использование NormalizeDouble() в тех местах, где она действительно не нужна, но я обнаружил, что в данном случае простое добавление Point, как вы сделали, является хорошим способом сделать это. Но я не проверял, как вы это делаете, поэтому не уверен, что это правильно, но, кажется, все в порядке. Я дам вам код, который я использую в своем советнике, в следующем сообщении.

Причина обращения: