[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 892
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Привет ! НЕ могу понять в чём косяк ???? Не модифицирует рыночный ордер
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);}
В ЧЁМ ТРАБЛ ПОМОГИТЕ ...........?????
Любой вопрос новичка, чтоб не захламлять форум. Профи не проходите мимо. Без вас никуда.
Любой вопрос новичка, чтоб не захламлять форум. Профи не проходите мимо. Без вас никуда.
Извините,никак не пойму,в чем загвоздка.По-моему,никогда у меня не выполняется условие 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); // расчёт профита для сел позиции//
Извините,никак не пойму,в чем загвоздка.По-моему,никогда у меня не выполняется условие 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.