| / | Форум |
|
qee
14.08.2006 14:03
while(OrderCloseTime()==0)
{ функция 1 } { функция 2 } "Функция 1" - работает. Но при закрытии ордера не переключается на "функцию 2". while(OrderCloseTime()==0) { функция 2 } { функция 1 } А так наоборот: "функция 2" - работает, "функция 1" - не работает. Всем спасибо |
|
Бесплатная Groupware для групп разработчиков Установите систему групповой работы TeamWox и объедините усилия всех разработчиков. Это поможет вашей команде работать быстрее и организованнее. Благодаря TeamWox станет намного проще ставить задачи и контролировать их выполнение. |
3649 |
Renat
14.08.2006 14:21
А почему Вы каждую функцию в фигурные скобки берете?
|
|
komposter
14.08.2006 14:29
OrderSelect() где?
|
|
DEan
14.08.2006 14:40
Оператор цикла while Если выражение истинно, то оператор выполняется до тех пор, пока
выражение не станет ложным. Если выражение ложно, то управление
передается следующему оператору.
while(выражение) оператор; Значение выражения определяется до выполнения оператора. Следовательно, если выражение ложно с самого начала, то оператор вообще не выполняется. Непонятно для чего используется цикл.. Я полял так.. while(OrderCloseTime() == 0) // Если выражение (OrderCloseTime() == 0) истинно, то.. { функция 1; // оператор (функция 1) выполняется до тех пор, пока выражение не станет ложным } while(OrderCloseTime() != 0) // Если выражение (OrderCloseTime() != 0) истинно, то.. { функция 2; // оператор (функция 2) выполняется до тех пор, пока выражение не станет ложным } |
|
qee
14.08.2006 19:49
DEan писал (а):
Оператор цикла while Если выражение истинно, то оператор выполняется до тех пор, пока выражение не станет ложным. Если выражение ложно, то управление передается следующему оператору. while(выражение) оператор; Значение выражения определяется до выполнения оператора. Следовательно, если выражение ложно с самого начала, то оператор вообще не выполняется. Непонятно для чего используется цикл.. Я полял так.. while(OrderCloseTime() == 0) // Если выражение (OrderCloseTime() == 0) истинно, то.. { функция 1; // оператор (функция 1) выполняется до тех пор, пока выражение не станет ложным } while(OrderCloseTime() != 0) // Если выражение (OrderCloseTime() != 0) истинно, то.. { функция 2; // оператор (функция 2) выполняется до тех пор, пока выражение не станет ложным }
void start() |
|
komposter
14.08.2006 21:16
У позиции из MODE_TRADES OrderCloseTime() всегда = 0 ;)
|
|
komposter
14.08.2006 21:23
И, как по мне, нельзя писать экспертов так...
Я бы сделал проще: extern double Lots = 0.1; extern int StopLoss = 30; extern int Slippage = 10; extern int TrailingStop = 30; void start() { int lastpos = -1; bool isExpertPosition = false; for (int g=OrdersTotal()-1; g>=0; g--) { if (OrderSelect(g, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==Symbol()) { if (OrderType()==OP_BUY) { TrailingStop(); isExpertPosition = true; lastpos = OP_BUY; } if (OrderType()==OP_SELL) { TrailingStop(); isExpertPosition = true; lastpos = OP_SELL; } } } } } if ( !isExpertPosition ) { if ( lastpos == OP_BUY ) { double pp1 = MarketInfo(Symbol(),MODE_POINT); double pBid = MarketInfo(Symbol(),MODE_BID); OrderSend(Symbol(),OP_SELL,Lots,pBid,Slippage,pBid+StopLoss*pp1,0,"",0,0); } if ( lastpos == OP_SELL ) { double pp2 = MarketInfo(Symbol(),MODE_POINT); double pAsk = MarketInfo(Symbol(),MODE_ASK); OrderSend(Symbol(),OP_BUY,Lots,pAsk,Slippage,pAsk-StopLoss*pp2,0,"",0,0); } } } void TrailingStop() { for (int j=OrdersTotal()-1; j>=0; j--) { if (OrderSelect(j, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==Symbol()) { double pp = MarketInfo(Symbol(),MODE_POINT); double pAsk1 = MarketInfo(Symbol(),MODE_ASK); double pBid2 = MarketInfo(Symbol(),MODE_BID); if (OrderType()==OP_BUY) { if (pAsk1-OrderStopLoss()<TrailingStop*pp) continue; else double b = pAsk1-TrailingStop*pp; OrderModify(OrderTicket(),OrderOpenPrice(),b,OrderTakeProfit(),0,CLR_NONE); } if (OrderType()==OP_SELL) { if (OrderStopLoss()-pBid2<TrailingStop*pp) continue; else double d = pBid2+TrailingStop*pp; OrderModify(OrderTicket(),OrderOpenPrice(),d,OrderTakeProfit(),0,CLR_NONE); } } } } } ps: код не проверял, могут быть опечатки ;) |
|
qee
15.08.2006 07:43
extern double Lots = 0.1; extern int StopLoss = 30; extern int Slippage = 10; extern int TrailingStop = 30; void start() { int lastpos = -1; bool isExpertPosition = false; for (int g=OrdersTotal()-1; g>=0; g--) { if (OrderSelect(g, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==Symbol()) { if (OrderType()==OP_BUY) { TrailingStop(); isExpertPosition = true; lastpos = OP_BUY; } if (OrderType()==OP_SELL) { TrailingStop(); isExpertPosition = true; lastpos = OP_SELL; } } } } } if ( !isExpertPosition ) { if ( lastpos == OP_BUY ) { double pp1 = MarketInfo(Symbol(),MODE_POINT); double pBid = MarketInfo(Symbol(),MODE_BID); OrderSend(Symbol(),OP_SELL,Lots,pBid,Slippage,pBid+StopLoss*pp1,0,"",0,0); } if ( lastpos == OP_SELL ) { double pp2 = MarketInfo(Symbol(),MODE_POINT); double pAsk = MarketInfo(Symbol(),MODE_ASK); OrderSend(Symbol(),OP_BUY,Lots,pAsk,Slippage,pAsk-StopLoss*pp2,0,"",0,0); } } } void TrailingStop() { for (int j=OrdersTotal()-1; j>=0; j--) { if (OrderSelect(j, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==Symbol()) { double pp = MarketInfo(Symbol(),MODE_POINT); double pAsk1 = MarketInfo(Symbol(),MODE_ASK); double pBid2 = MarketInfo(Symbol(),MODE_BID); if (OrderType()==OP_BUY) { if (pAsk1-OrderStopLoss()<TrailingStop*pp) continue; else double b = pAsk1-TrailingStop*pp; OrderModify(OrderTicket(),OrderOpenPrice(),b,OrderTakeProfit(),0,CLR_NONE); } if (OrderType()==OP_SELL) { if (OrderStopLoss()-pBid2<TrailingStop*pp) continue; else double d = pBid2+TrailingStop*pp; OrderModify(OrderTicket(),OrderOpenPrice(),d,OrderTakeProfit(),0,CLR_NONE); } } } } } ps: код не проверял, могут быть опечатки ;) extern double Lots = 0.1; extern int StopLoss = 30; extern int Slippage = 10; extern int TrailingStop = 30; bool isExpertPosition = false; int lastpos = -1; void start() { for (int g=OrdersTotal()-1; g>=0; g--) { if (OrderSelect(g, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==Symbol()) { if (OrderType()==OP_BUY) { TrailingStop(); isExpertPosition = true; lastpos = OP_BUY; } if (OrderType()==OP_SELL) { TrailingStop(); isExpertPosition = true; lastpos = OP_SELL; } } } } if ( !isExpertPosition ) { if ( lastpos == OP_BUY ) { double pp1 = MarketInfo(Symbol(),MODE_POINT); double pBid = MarketInfo(Symbol(),MODE_BID); OrderSend(Symbol(),OP_SELL,Lots,pBid, Slippage, pBid+StopLoss*pp1, 0,"", 0,0); } if ( lastpos == OP_SELL ) { double pp2 = MarketInfo(Symbol(),MODE_POINT); double pAsk = MarketInfo(Symbol(),MODE_ASK); OrderSend(Symbol(),OP_BUY,Lots,pAsk,Slippage, pAsk-StopLoss*pp2, 0, "", 0,0); } } } void TrailingStop() { for (int j=OrdersTotal()-1; j>=0; j--) { if (OrderSelect(j, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==Symbol()) { double pp = MarketInfo(Symbol(),MODE_POINT); double pAsk1 = MarketInfo(Symbol(),MODE_ASK); double pBid2 = MarketInfo(Symbol(),MODE_BID); if (OrderType()==OP_BUY) { if (pAsk1-OrderStopLoss()<TrailingStop*pp) continue; else double b = pAsk1-TrailingStop*pp; OrderModify(OrderTicket(), OrderOpenPrice(), b,OrderTakeProfit(), 0,CLR_NONE); } if (OrderType()==OP_SELL) { if (OrderStopLoss()-pBid2<TrailingStop*pp) continue; else double d = pBid2+TrailingStop*pp; OrderModify(OrderTicket(), OrderOpenPrice(), d,OrderTakeProfit(), 0,CLR_NONE); } } } } } Не работает опять. Ордер закрывается, но вместо него ничего не открывается. |
|
komposter
15.08.2006 12:25
Зачем коверкать мой код, а потом говорить, что он не работает?
bool isExpertPosition = false; должно быть в функции start |
|
qee
15.08.2006 14:24
komposter писал (а): Зачем коверкать мой код, а потом говорить, что он не работает? bool isExpertPosition = false; должно быть в функции start Понял. Исправил. Пошел тестить. |
|
qee
15.08.2006 14:41
komposter писал (а): Зачем коверкать мой код, а потом говорить, что он не работает? bool isExpertPosition = false; должно быть в функции start Работает. СПАСИБО. |
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий