[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 892

 

Привет ! НЕ могу понять в чём косяк ???? Не модифицирует рыночный ордер
slb =NormalizeDouble(Bid - (StopLoss * Point),Digits); // расчёт стопа для бай позиций//
tpb =NormalizeDouble(Ask + (TakeProfit* Point),Digits); // расчёт профита для бай позиций//
sls =NormalizeDouble(Ask + (StopLoss * Point),Digits); // расчёт стопа для селл позиций//
tps =NormalizeDouble(Bid - (TakeProfit* Point),Digits);

//================================================== ==================//
int total=OrdersTotal();
int n=0;
for (int i=total-1; i>=0; i--)
{
if(OrderSelect(i, SELECT_BY_POS))
{
if(OrderSymbol()==Symbol())
{
n++;
}}}
if ( total == 1 )
{
for (int k=total-1; k>=0; k--)
{
if(OrderSelect(k, SELECT_BY_TICKET))
Alert("ордер есть", k);
{
if ((OrderType()==OP_BUY)&&(OrderTakeProfit()==0)&&(O rderStopLoss()==0))
{
OrderModify(k,OrderOpenPrice(),slb,tpb,0,Blue);
Alert("ошибка", GetLastError());

}}}}
return(0);}

В ЧЁМ ТРАБЛ ПОМОГИТЕ ...........?????

 

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

 
belck:

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

Это вы к чему? Вроде как значит можно и временем поинтересоваться... или здоровьем... :))))))
 


Извините,никак не пойму,в чем загвоздка.По-моему,никогда у меня не выполняется условие while,потому что,ечли я внутрь цикла вставляю Comment,оно не отражается.Также выше цикла переменная В у меня равна нормальным ожидаемым значениям,типа 0.0011,а если я его множу на Point,то выходит 0!!!!

 

int start()

{
double А,Б,В ;А=Close[1];Б=Close[Баров];
В=А-Б ;Comment("Значение разниці ", В*Point);
while (В*Point >Размах)
{ Comment("Значение разниці ", В);
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-stoploss*Point,Ask+TakeProfit*Point,"macd sample",16384,0,Green);}

while (0-В*Point<Размах)
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+stoploss*Point,Bid-TakeProfit*Point,"macd sample",16384,0,Red);

Alert("Значение ", В);

Comment("Значение разниці ",В);

//----

//----
return(0);
}

 

я не уверен но правильнее будет так

int start()

{
double А,Б,В ;А=Close[1];Б=Close[Баров]; Что значит Close[Баров]; ???? Close[номер бара порядковый назад, без текущего]

прошлая свеча close[1]. позапрошлая свеча close[2]

В=(А-Б)*Point ;Comment("Значение разниці ", В); B будет равно закрытие прошлой свечи минус закрытие свечи которое вы укажите в Б= close [....]
while (В >Размах) и скорее всего не while a if условие
{ Comment("Значение разниці ", В);
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-stoploss*Point,Ask+TakeProfit*Point,,"macd sample",16384,0,Green);

}

while (0-В<Размах) и скорее всего не while a if условие

{

OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+stoploss*Point,Bid-TakeProfit*Point,"macd sample",16384,0,Red);
}
Alert("Значение ", В);

Comment("Значение разниці ",В);

//----

//----
return(0);
}
Могу ошибаться.....

 
Спасибо!!   Щас попробую.  А то три дня не пойму,в чем прикол,формально вроде все правильно.
 
Не,та же байда.За ответ-спасибо!! А где собака порылась,не пойму.
 

В вашем коде много ошибок ...... что вы хотите сделать какой результат??? Русских букв не должно быть ...

В у вас не может быть в размакс так как В имеет в памяти число типа 1,23456

0-В будет отрицательное число....

 

и расчёт профита и лосса лучше делать так

slb =NormalizeDouble(Bid - (StopLoss * Point),Digits); // расчёт стопа для бай позиций//
tpb =NormalizeDouble(Ask + (TakeProfit* Point),Digits); // расчёт профита для бай позиций//
sls =NormalizeDouble(Ask + (StopLoss * Point),Digits); // расчёт стопа для селл позиций//
tps =NormalizeDouble(Bid - (TakeProfit* Point),Digits); // расчёт профита для сел позиции//

 
Dimka-novitsek:


Извините,никак не пойму,в чем загвоздка.По-моему,никогда у меня не выполняется условие while,потому что,ечли я внутрь цикла вставляю Comment,оно не отражается.Также выше цикла переменная В у меня равна нормальным ожидаемым значениям,типа 0.0011,а если я его множу на Point,то выходит 0!!!!

int start()

{
double А,Б,В ;А=Close[1];Б=Close[Баров];
В=А-Б ;Comment("Значение разниці ", В*Point);
while (В*Point >Размах)
{ Comment("Значение разниці ", В);
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-stoploss*Point,Ask+TakeProfit*Point,"macd sample",16384,0,Green);}

while (0-В*Point<Размах)
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+stoploss*Point,Bid-TakeProfit*Point,"macd sample",16384,0,Red);

Alert("Значение ", В);

Comment("Значение разниці ",В);

//----

//----
return(0);
}

А вы увурены, что разницу между А и Б вам нужно умножать на Point?

Значения А и Б действительные числа. Умножая их разницу на Point, вы еще больше увеличиваете количество знаков после запятой. Если вам нужно получить целое, чтобы сравнить с целым "Размах", то скорее надо разделить на Point.

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