Ищу срипт открывающий одновременно несколько ордеров. - страница 2

 
chepikds:

хм, нужен фиксированный лот 1.

Я сегодня само воплощение доброты :-)

//+------------------------------------------------------------------+
//|                                                         test.mq4 |
//|                      Copyright © 2009, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
#property show_inputs
extern bool Buy=false; //для открытия ордера на покупку
extern bool Sell=false; //для открытия ордера на продажу
extern int TakeProfit=100;
extern int StopLoss=100;
//+------------------------------------------------------------------+
int start()
{double Lot=1; //ставим фиксированный лот
 if(Lot==0) {Alert("Недостаточно средств!");return(0);}
 RefreshRates();
 if(Buy)  NewOrder(OP_BUY,Lot);
 if(Sell) NewOrder(OP_SELL,Lot);
return(0);}
//+------------------------------------------------------------------+
int NewOrder(int Cmd,double Lot)
{double TP=0; //тейкпрофит
 double SL=0; //стоплосс
 double PR=0; //Цена
 while(!IsTradeAllowed()) Sleep(100);
 if(Cmd==OP_BUY)
   {PR=Ask;
    if(TakeProfit>0) TP=Ask+TakeProfit*Point;
    if(StopLoss>0) SL=Ask-StopLoss*Point;}
 if(Cmd==OP_SELL)
   {PR=Bid;
    if(TakeProfit>0) TP=Bid-TakeProfit*Point;
    if(StopLoss>0) SL=Bid+StopLoss*Point;}
 int tic=OrderSend(Symbol(),Cmd,Lot,PR,3,SL,TP,"",0,0,CLR_NONE);
 if(tic<0) Print("Ошибка открытия ордера: ",GetLastError());
return(tic);}
//+------------------------------------------------------------------+
 
waitra:

Я сегодня само воплощение доброты :-)


спасибо, что возитесь со мной :), всё заработало, запускаю!!! даст бог и конкурс будет выигран!
 

waitra, не знаю в чём причина, но не точно закрывает позиции при фиксированном стопе (10):

 
chepikds:

waitra, не знаю в чём причина, но не точно закрывает позиции при фиксированном стопе (10):

Фиксированный не стоп, а тейк. На сколько он выставлен на столько прибыль и фиксируется. Всё правильно.

А о причине Владислав писал уже: нужно RefreshRates() вставить в цикле перед пересчётом тейков/стопов и открытием позиции.

 
goldtrader:

Фиксированный не стоп, а тейк. На сколько он выставлен на столько прибыль и фиксируется. Всё правильно.

А о причине Владислав писал уже: нужно RefreshRates() вставить в цикле перед пересчётом тейков/стопов и открытием позиции.


ага, тейк, я перепутал. RefreshRates() вставил, вот такой код получился:

//+------------------------------------------------------------------+
//|                                                         test.mq4 |
//|                      Copyright © 2009, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
#property show_inputs
extern bool Buy=false; //для открытия ордера на покупку
extern bool Sell=false; //для открытия ордера на продажу
extern int TakeProfit=10;
extern int StopLoss=0;
//+------------------------------------------------------------------+
int start()
{double Lot=1; //ставим фиксированный лот
 if(Lot==0) {Alert("Недостаточно средств!");return(0);}
 RefreshRates();
 if(Buy)  NewOrder(OP_BUY,Lot);
 if(Sell) NewOrder(OP_SELL,Lot);
return(0);}
//+------------------------------------------------------------------+
int NewOrder(int Cmd,double Lot)
{double TP=0; //тейкпрофит
 double SL=0; //стоплосс
 double PR=0; //Цена
 while(!IsTradeAllowed()) Sleep(100);
 RefreshRates();
 if(Cmd==OP_BUY)
   {PR=Ask;
    if(TakeProfit>0) TP=Ask+TakeProfit*Point;
    if(StopLoss>0) SL=Ask-StopLoss*Point;}
 if(Cmd==OP_SELL)
   {PR=Bid;
    if(TakeProfit>0) TP=Bid-TakeProfit*Point;
    if(StopLoss>0) SL=Bid+StopLoss*Point;}
 int tic=OrderSend(Symbol(),Cmd,Lot,PR,3,SL,TP,"",0,0,CLR_NONE);
 if(tic<0) Print("Ошибка открытия ордера: ",GetLastError());
return(tic);}
//+------------------------------------------------------------------+
 
chepikds:


ага, тейк, я перепутал. RefreshRates() вставил, вот такой код получился:

Другое дело - теперь должен работать корректно.
 
goldtrader:
Другое дело - теперь должен работать корректно.

не хочет корректно.
 
Подскажите пожалуйста код, который добавляет сразу, к примеру, 10 ордеров за раз.
 
Evgeniy Kostin:
Подскажите пожалуйста код, который добавляет сразу, к примеру, 10 ордеров за раз.
for(int cnt=0; cnt<1000; cnt++)
{
     while(true)
     {
          if(OrderSend(...)>0)
               break;
     }
}
Какой вопрос, такой ответ
 
Костя, Спасибо! =)