Ответить
18.02.2013, 13:30
Аватар для AlexeyVik
AlexeyVik AlexeyVik вне форума Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,712 раз(а) / Репутация: 3708
Сообщение от: Алекc1234
Есть такой код
Код:
for (i=0; i<=OrdersTotal()-1; i++)  
 {     
 if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
 { 
 if ( (OrderSymbol() == Symbol()) && (OrderMagicNumber() == Magic) ) 
 {
 double fir_op_pr = OrderOpenPrice(); 
  if(ot==OP_BUY) 
  {        
   prof = NormalizeDouble((Bid-fir_op_pr),Digits)/Point; }
  if (ot == OP_SELL)   
   {
   prof = NormalizeDouble((fir_op_pr-Ask),Digits)/Point; } 
  break;
  }
  }
  }
Подскажите, пожалуйста, почему на бай работает всё как надо, а на селл - нет? Дальше код не привожу, потому что будет непонятно всё равно принцип работы - долго объяснять. Но на бай работает правильно!А на селл - нет...
Если я правильно понял ot = OrderType();
Но нигде этого нет. Получается так, что ot = 0 и OP_BUY тоже = 0 в этом случае работает. А OP_SELL = 1 при ot = 0 условие не выполняется, вот и не работает.
18.02.2013, 13:30
Регистрация: 05.01.2012 / Сообщений: 1,149
Поблагодарили 7,800 раз(а) / Репутация: 7844
А условия что за секрет? проще на практики пояснить чем на пальцах.
18.02.2013, 13:34
Аватар для Алекc1234
Алекc1234 Алекc1234 вне форума Местный житель
Регистрация: 24.03.2011 / Сообщений: 697
Поблагодарили 276 раз(а) / Репутация: 276
Если я правильно понял ot = OrderType();
Но нигде этого нет. Получается так, что ot = 0 и OP_BUY тоже = 0 в этом случае работает. А OP_SELL = 1 при ot = 0 условие не выполняется, вот и не работает.
Да, я забыл, до цикла я пишу, что ot = OrderType();
Мой тейкпрофит-магнит, а стоплосс-паразит
Тебе повезло,ты не такой как все
Ты работаешь на форексе
18.02.2013, 13:35
Аватар для Алекc1234
Алекc1234 Алекc1234 вне форума Местный житель
Регистрация: 24.03.2011 / Сообщений: 697
Поблагодарили 276 раз(а) / Репутация: 276
1)Вместо ot напиши OrderType()
2)Если после if() надо выполнить одно действие, то квадратных скобок не надо.
Спасибо, я так и сделал, но не помогло...
Мой тейкпрофит-магнит, а стоплосс-паразит
Тебе повезло,ты не такой как все
Ты работаешь на форексе
18.02.2013, 13:45
Аватар для DiZin
DiZin DiZin вне форума Почётный гражданин
Регистрация: 06.10.2009 / Адрес: то тут, то там / Сообщений: 734
Поблагодарили 460 раз(а) / Репутация: 465
Сообщение от: Алекc1234
Да, я забыл, до цикла я пишу, что ot = OrderType();
а почему не внутри цикла?
Добрею прямо на глазах
18.02.2013, 13:50
Аватар для eevviill
eevviill eevviill вне форума Заблокирован
За второе место в конкурсе 

Регистрация: 30.07.2009 / Сообщений: 5,474
Поблагодарили 9,029 раз(а) / Репутация: 9029
  • Отправить сообщение для eevviill с помощью Skype™
Сообщение от: Алекc1234
Спасибо, я так и сделал, но не помогло...
Внутри цыкла написал OrderType() и не помогло?
18.02.2013, 13:57
Аватар для Алекc1234
Алекc1234 Алекc1234 вне форума Местный житель
Регистрация: 24.03.2011 / Сообщений: 697
Поблагодарили 276 раз(а) / Репутация: 276
Внутри цыкла написал OrderType() и не помогло?
Нет, eevviill, не помогло...
Мой тейкпрофит-магнит, а стоплосс-паразит
Тебе повезло,ты не такой как все
Ты работаешь на форексе
18.02.2013, 13:58
Регистрация: 05.01.2012 / Сообщений: 1,149
Поблагодарили 7,800 раз(а) / Репутация: 7844
В программе логика правильно одо может быть не то правильность открытия 2 пипса уже проблема на бай задумайтесь
18.02.2013, 14:15
Аватар для Алекc1234
Алекc1234 Алекc1234 вне форума Местный житель
Регистрация: 24.03.2011 / Сообщений: 697
Поблагодарили 276 раз(а) / Репутация: 276
В программе логика правильно одо может быть не то правильность открытия 2 пипса уже проблема на бай задумайтесь
Ставится отложенный стоп ордер - при его открытии и происходит расчёт в этом куске кода...
Мой тейкпрофит-магнит, а стоплосс-паразит
Тебе повезло,ты не такой как все
Ты работаешь на форексе
18.02.2013, 15:12
Аватар для AlexeyVik
AlexeyVik AlexeyVik вне форума Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,712 раз(а) / Репутация: 3708
Сообщение от: Алекc1234
Спасибо, я так и сделал, но не помогло...
Не просто внутри цикла надо, а обязательно после if(OrderSelect(i,
Внутри этого условия.
18.02.2013, 15:13
Аватар для Алекc1234
Алекc1234 Алекc1234 вне форума Местный житель
Регистрация: 24.03.2011 / Сообщений: 697
Поблагодарили 276 раз(а) / Репутация: 276
Не просто внутри цикла надо, а обязательно после if(OrderSelect(i,
Да, так и делаю, но опять же на бай всё хорошо, а на селл - работает по другому...
Мой тейкпрофит-магнит, а стоплосс-паразит
Тебе повезло,ты не такой как все
Ты работаешь на форексе
18.02.2013, 15:15
Аватар для AlexeyVik
AlexeyVik AlexeyVik вне форума Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,712 раз(а) / Репутация: 3708
Сообщение от: Алекc1234
Да, так и делаю, но опять же на бай всё хорошо, а на селл - работает по другому...
Ну покажи как это у тебя сейчас написано.
18.02.2013, 15:21
Аватар для Алекc1234
Алекc1234 Алекc1234 вне форума Местный житель
Регистрация: 24.03.2011 / Сообщений: 697
Поблагодарили 276 раз(а) / Репутация: 276
Ну покажи как это у тебя сейчас написано.
Вот так сейчас написал
PHP код:
for (i=0i<=OrdersTotal()-1i++)  
 {     
 if(
OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
 { 
 if ( (
OrderSymbol() == Symbol()) && (OrderMagicNumber() == Magic) ) 
 {
 
int ot OrderType();
 
double fir_op_pr OrderOpenPrice(); 
  if(
ot==OP_BUY)      prof NormalizeDouble((Bid-fir_op_pr),Digits)/Point
  if (
ot == OP_SELL)   prof NormalizeDouble((fir_op_pr-Ask),Digits)/Point;    
 
breek;
 }
 }
 } 
Вместо ot = OrderType(); писал и if(OrderType()==OP_BUY)
if(OrderType()==OP_SELL)
все равно не то
Мой тейкпрофит-магнит, а стоплосс-паразит
Тебе повезло,ты не такой как все
Ты работаешь на форексе

Последний раз редактировалось Алекc1234; 18.02.2013 в 15:24.
18.02.2013, 15:35
Аватар для AlexeyVik
AlexeyVik AlexeyVik вне форума Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,712 раз(а) / Репутация: 3708
Извини не сразу заменил. Там совершенно не нужен break;
18.02.2013, 15:41
Аватар для Алекc1234
Алекc1234 Алекc1234 вне форума Местный житель
Регистрация: 24.03.2011 / Сообщений: 697
Поблагодарили 276 раз(а) / Репутация: 276
Извини не сразу заменил. Там совершенно не нужен break;
Убрал break - то же самое
Мой тейкпрофит-магнит, а стоплосс-паразит
Тебе повезло,ты не такой как все
Ты работаешь на форексе
18.02.2013, 15:55
Аватар для AlexeyVik
AlexeyVik AlexeyVik вне форума Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,712 раз(а) / Репутация: 3708
Сообщение от: Алекc1234
Убрал break - то же самое
Ну наверное ты хочешь увидеть не то что там написал...
Прокомментируй каждую строку. Может тогда разберёшься что должно там получиться.
И ещё одно замечание: Не надо объявлять переменные в теле цикла.
int ot = OrderType();
double fir_op_pr = OrderOpenPrice();

ДО цикла int ot; double fir_op_pr;
А в теле цикла только присваивание им значений.
ot = OrderType();
fir_op_pr = OrderOpenPrice();
18.02.2013, 19:01
Регистрация: 05.01.2012 / Сообщений: 1,149
Поблагодарили 7,800 раз(а) / Репутация: 7844
Сообщение от: Алекc1234
Вот так сейчас написал
PHP код:
for (i=0i<=OrdersTotal()-1i++)  
 {     
 if(
OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
 { 
 if ( (
OrderSymbol() == Symbol()) && (OrderMagicNumber() == Magic) ) 
 {
 
int ot OrderType();
 
double fir_op_pr OrderOpenPrice(); 
  if(
ot==OP_BUY)      prof NormalizeDouble((Bid-fir_op_pr),Digits)/Point
  if (
ot == OP_SELL)   prof NormalizeDouble((fir_op_pr-Ask),Digits)/Point;    
 
breek;
 }
 }
 } 
Вместо ot = OrderType(); писал и if(OrderType()==OP_BUY)
if(OrderType()==OP_SELL)
все равно не то
Давайте подумаем заново а не проще ли сделать так?\
1 Стоп ордер
//+------------------------------------------------------------------+
void BuyStop1()
{
double ldStop=0, ldTake=0;
double pAsk=Ask+Delta*point;
//----
if (!ExistOrder(1)) {
if (StopLoss!=0) ldStop=pAsk-StopLoss*point;
if (TakeProfit!=0) ldTake=pAsk+TakeProfit*point;
SetOrder(OP_BUYSTOP, pAsk, ldStop, ldTake,1);
}
}
//+------------------------------------------------------------------+
void SellStop1()
{
double ldStop=0, ldTake=0;
double pBid=Bid-Delta*point;
//----
if (!ExistOrder(2)) {
if (StopLoss!=0) ldStop=pBid+StopLoss*point;
if (TakeProfit!=0) ldTake=pBid-TakeProfit*point;
SetOrder(OP_SELLSTOP, pBid, ldStop, ldTake,2);
}
}
//+------------------------------------------------------------------+
bool ExistOrder(int mn) {
bool Exist=False;
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic+mn) {
Exist=True; break;
}
}
}
return(Exist);
}
//+------------------------------------------------------------------+
void SetOrder(int op, double pp, double ldStop, double ldTake, int mn) {
color clOpen;
if (op==OP_BUYSTOP) clOpen=Blue;
else clOpen=Red;
OrderSend(Symbol(),op,Lots,pp,0,ldStop,ldTake,Comm entOrder,Magic+mn,0,clOpen);
Sleep(10000);
RefreshRates();
}
//+------------------------------------------------------------------+
самый простой лучшего прогера Кима! и Не будет запарки
18.02.2013, 19:21
Аватар для Алекc1234
Алекc1234 Алекc1234 вне форума Местный житель
Регистрация: 24.03.2011 / Сообщений: 697
Поблагодарили 276 раз(а) / Репутация: 276
strannik-ps, это конечно, хорошо, только у меня идёт подсчёт профита в пунктах и исходя из этого происходит закрытие ордера...
Мой тейкпрофит-магнит, а стоплосс-паразит
Тебе повезло,ты не такой как все
Ты работаешь на форексе
18.02.2013, 20:13
Аватар для AlexeyVik
AlexeyVik AlexeyVik вне форума Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,712 раз(а) / Репутация: 3708
Сообщение от: Алекc1234
strannik-ps, это конечно, хорошо, только у меня идёт подсчёт профита в пунктах и исходя из этого происходит закрытие ордера...
А скажи мне. Одновременно могут быть открыты и бай и сел?
18.02.2013, 20:15
Аватар для Алекc1234
Алекc1234 Алекc1234 вне форума Местный житель
Регистрация: 24.03.2011 / Сообщений: 697
Поблагодарили 276 раз(а) / Репутация: 276
А скажи мне. Одновременно могут быть открыты и бай и сел?
Такое у меня бывает, но редко, а я это не учитываю - вижу только тогда ошибку когда открыто одно направление - или только бай или только селл...Вернее, на бай ошибки то и нету, только на селл...
Мой тейкпрофит-магнит, а стоплосс-паразит
Тебе повезло,ты не такой как все
Ты работаешь на форексе

Последний раз редактировалось Алекc1234; 18.02.2013 в 20:18.
Ответить

Метки
mql4, mql4 помощь, вопросы mql4


Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Выкл.
Pingbacks are Выкл.
Refbacks are Выкл.



Текущее время: 11:49. Часовой пояс GMT.


Перевод: zCarot
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
SEO by vBSEO