Как кодировать? - страница 170

 
Roger09:
Посмотрите на

double NormalizeDouble( double value, int digits)

Если вы поставите digits=2, вы сможете увидеть то, что хотите.

Здравствуйте,

Мне кажется, я не очень ясно выразился. Например:

- Если текущая цена 1.3756, код должен вернуть 56

- Если текущая цена 99.22, код должен вернуть 22

- Если текущая цена 1.4499, код должен вернуть 99.

По сути, я пытаюсь вернуть значение последних двух цифр, независимо от того, стоит ли в котировке 4 знака после запятой или 2 знака после запятой.

NomalizeDouble округляет цену только до указанного значения Digits placing.

У кого-нибудь есть идеи?

 
musical:
Привет,

Мне кажется, я не очень ясно выразился. Например:

- Если текущая цена 1.3756, код должен вернуть 56

- Если текущая цена 99.22, код должен вернуть 22

- Если текущая цена 1.4499, код должен вернуть 99

По сути, я пытаюсь вернуть значение последних двух цифр, независимо от того, стоит ли в котировке 4 знака после запятой или 2 знака после запятой.

NomalizeDouble округляет цену только до указанного значения Digits placing.

У кого-нибудь есть идеи?

ОК

double lasttwonumbers=(Bid-MathFloor(Bid/(Point*100))*Point*100)/Point;

 
1Dave7:
Как мне создать советника, который будет закрывать любой открытый ордер от нескольких советников, если SL составляет 10 пунктов или больше?

Дейв

<<<

Myfxidea - это сервис для построения графиков свечных моделей и предоставления советников для mt4

 
Roger09:
ОК double lasttwonumbers=(Bid-MathFloor(Bid/(Point*100))*Point*100)/Point;

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

 

Помогите с трейлинг стопом / 1 риск или позиция M

Привет всем,

Я пытался найти на форуме решение моей проблемы:

В начале моего советника:

//---- buy conditions

if(Ask > mybuyconditions)

{

ticket=OrderSend(Symbol(),OP_BUY,LotsLong(),Ask,Spread,Bid-(Ask-lowestof10bars),((BBupper-BBlower)/(Ask-lowestof10bars))*1000,"Einstieg 1",magic+1,0,Green);

}

//---- sell conditions

if(Bid < mysellconditions)

{

ticket=OrderSend(Symbol(),OP_SELL,LotsShort(),Bid,Spread,Ask+(highestof10bars-Bid),((BBupper-BBlower)/(highestof10bars-Bid))/100,"Einstieg -1",magic-1,0,Red);

}

//----[/CODE]

Stopploss: its easy 10 bars hi/lo

Takeprofit: here i write my formula for my Trailingstop, and that is:

Take the differenz of BBupper - BBlower at the order open time. Then divide by StopLoss in Pips and you have an Factor. Then take the actual BB differenz and divide it by this Faktor. NOW WE HAVE OUR VOLA BB TRAILINGSTOPP!!!!!

SO, my big problem is now to save this FAKTOR!!!! I saved it in th Takeprofit of Ordersend, it works but it is not right!!!!!

And know the 2te Question:

Position Management:

so my order is open and i have my trailing stopp that trails : So and now if the trailingstop is > orderopenprice send next ORDER!!! It's logical because so i can always sicure to risk just my 1 R Risk.

.... if Trailingstopp is > orderopenprice of secondOrder send 3te order.

HERE MY EXAMPLES:

for(int i = (OrdersTotal()-1); i >= 0; i--)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

{

if(OrderType()==OP_BUY && OrderMagicNumber() == magic+1)

if(OrderStopLoss()< Bid-(oben-unten)/(OrderTakeProfit()/1000))

{

OrderModify(OrderTicket(),OrderOpenPrice(),High-(oben-unten)/(OrderTakeProfit()/1000),OrderTakeProfit(),0,Indigo);

return;

}

if(OrderStopLoss() > OrderOpenPrice() && CalculateCurrentOrders(Symbol()) == 1)

{

ticket1=OrderSend(Symbol(),OP_BUY,LotsLong(),Ask,Spread,Bid-(Ask-Low),((oben-unten)/(Ask-Low))*1000,"Einstieg 2",magic+2,0,Green);

return;

}

}

{

if(OrderType()==OP_BUY && OrderMagicNumber() == magic+2 && CalculateCurrentAfterOrders(Symbol()) <= 1)

{

if(OrderStopLoss()<Bid-(oben-unten)/(OrderTakeProfit()/1000))

{

OrderModify(OrderTicket(),OrderOpenPrice(),High-(oben-unten)/(OrderTakeProfit()/1000),OrderTakeProfit(),0,Indigo);

return;

}

if(OrderStopLoss() > OrderOpenPrice() && CalculateCurrentOrders(Symbol()) == 2)

{

ticket2=OrderSend(Symbol(),OP_BUY,LotsLong(),Ask,Spread,Bid-(Ask-Low),((oben-unten)/(Ask-Low))*1000,"Einstieg 3",magic+3,0,Green);

return;

}

}

{

if(OrderType()==OP_BUY && OrderMagicNumber() == magic+3 && CalculateCurrentAfterOrders(Symbol()) <= 2)

{

if(OrderStopLoss()< Bid-(oben-unten)/(OrderTakeProfit()/1000))

{

OrderModify(OrderTicket(),OrderOpenPrice(),High-(oben-unten)/(OrderTakeProfit()/1000),OrderTakeProfit(),0,Indigo);

return;

}

}

}

}

[CODE] if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

{

if(OrderType()==OP_BUY && OrderMagicNumber() == magic+1)

{

{

OrderModify(OrderTicket(),OrderOpenPrice(),High-(oben-unten)/(OrderTakeProfit()/1000),OrderTakeProfit(),0,Indigo);

return;

}

if(OrderStopLoss() >= OrderOpenPrice() && CalculateCurrentOrders(Symbol()) == 1)

{

ticket1=OrderSend(Symbol(),OP_BUY,LotsLong(),Ask,Spread,0,0,"Einstieg 2",magic+2,0,Green);

return;

}

}

if(OrderType()==OP_BUY && OrderMagicNumber() == magic+2)

{

if(OrderStopLoss() >= OrderOpenPrice() && CalculateCurrentOrders(Symbol()) == 2)

{

ticket2=OrderSend(Symbol(),OP_BUY,LotsLong(),Ask,Spread,0,0,"Einstieg 3",magic+3,0,Green);

return;

}

}

}

{

if(OrderType()==OP_BUY && OrderMagicNumber() == magic+2)

{

if(CalculateCurrentOrders(Symbol()) == 0)

{

OrderClose(ticket1,OrderLots(),Ask,Spread,Red); return;

}

}

}

if(OrderType()==OP_BUY && OrderMagicNumber() == magic+3)

{

OrderClose(i,OrderLots(),Ask,Spread,Red); return;

}

Я надеюсь, что кто-то может помочь мне с этой проблемой!!!!!. Спасибо всем.

 

Добавление кода Когда позиция идет против вас "х" пунктов добавьте дополнительный лот с fixedtpsl

привет

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

Когда позиция идет против вас "20" пунктов добавьте дополнительный лот "0.1" с собственным вводом TP и SL

возможно ли это реализовать?

Также этот советник очень хорош, но он открывает только покупки.

может быть, добавить логику "продажи"

пожалуйста, помогите мне

Файлы:
_v1.2.mq4  6 kb
 

Нужна помощь в решении проблемы программирования

Как можно запрограммировать Metatrader 4 на выход из предыдущей позиции и открытие новой позиции на САМОМ баре, если установить EachTickMode в false? Когда вы устанавливаете EachTickMode в True, он автоматически делает это, но когда вы устанавливаете его в false, он закрывает предыдущую позицию на одном баре, а затем ждет следующего бара, чтобы открыть новую позицию. Я использую

таймфрейм H4 и ждать еще 4 часа, чтобы открыть новую позицию после подачи сигнала, неприемлемо. Моя система слишком чувствительна, чтобы использовать EachTickMode=True. Любая помощь, которую кто-либо может мне оказать, будет очень признательна.

 

Необходима помощь для преодоления ошибки 130 Ordersend

Ниже приведена моя функция покупки. Если я устанавливаю переменную order_type в 1 (для рыночного ордера), она работает, поэтому я знаю, что мои функции stoploss и takeprofit работают. Проблема, видимо, заключается в определении цены для ордера op_buylimit. Я пытаюсь рассчитать цену моего ордера, уменьшая Ask на процент от длины (pct_of_length) тела свечи (на баре 1). Я перепробовал множество вариантов кодирования (некоторые из них включают NormalizeDouble), но не могу пройти дальше ошибки 130. Может ли кто-нибудь помочь? Кстати, я использую IBFX.

Заранее спасибо!

bool place_buy_order() {

int ticket, length_in_pips, offset_in_pips;

double buy_limit_price;

// pct_of_length является внешним целым числом, в настоящее время установлено на 10

if ( order_type == 2 && pct_of_length > 0 )

{

length_in_pips = MathAbs(High[1]-Low[1]) * MathPow(10,Digits);

offset_in_pips = MathRound(length_in_pips * (pct_of_length/100));

buy_limit_price = Ask - offset_in_pips * Point;

ticket = OrderSend(Symbol(),OP_BUYLIMIT,LotSize(),buy_limit_price,0,stoploss("b",buy_limit_price),takeprofit("b",buy_limit_price),"",MAGICMA,0,Blue);

}

else

// рыночный ордер

ticket = OrderSend(Symbol(),OP_BUY,LotSize(),Ask,Slippage,stoploss("b",Ask),takeprofit("b",Ask),"",MAGICMA,0,Blue);

if ( ticket == -1 ) return(false); else return(true);

}

 

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

Lux

 
stocktrader24202:
Как вы можете запрограммировать Metatrader 4 на выход из предыдущей позиции и открытие новой позиции на САМОМ баре, если вы установили EachTickMode на false? Когда вы устанавливаете EachTickMode в True, он автоматически делает это, но когда вы устанавливаете его в false, он закроет предыдущую позицию на одном баре, а затем будет ждать следующего бара, чтобы открыть новую позицию. Я использую таймфрейм H4, и ждать еще 4 часа, чтобы открыть новую позицию после получения сигнала, неприемлемо. Моя система слишком чувствительна, чтобы использовать EachTickMode=True. Любая помощь, которую кто-либо может мне оказать, будет очень признательна.

EachTickMode - это переменная, которую первоначальный кодер советника включил СПЕЦИФИЧЕСКИ, чтобы вы могли выбрать либо открытие на той же свече, либо открытие на следующей.

Похоже, что советник делает ТОЧНО то, для чего он был создан, поэтому я не уверен, в чем ваша проблема.

Вы говорите, что он работает так, как вы хотите, когда вы устанавливаете переменную в true, так в чем проблема? Просто установите переменную в true.

Lux