[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 175

 

Добрый день подскажите пожалуйста вот есть код


OrderSelect(OrdersHistoryTotal()-1, SELECT_BY_POS, MODE_HISTORY);//выбрать последний ордер
if (OrderType()==OP_BUY||OP_SELL)
 {
 if (OrderMagicNumber()==1)
  {
  if (OrderProfit()<0)

   {

который выберет последний ордер в истории с отрицательным профитом.

есть такая ситуация что одновременно закрывается 3 ордера, как понять что именно 3 последних закрылись одновременно?

пробовал делать цикл for но он находит все в истории ордера закрытые в убыток, а мне нужно только последний или последние в зависимости сколько их закрылось одновременно

 
BruDer:

в поиске не нашел ответа

как из скрипта увидеть какие индикаторы есть на графике, какие параметры и индикаторов, в каких подокнах они находятся?

спасибо


никак.
 

vik-777:

как понять что именно 3 последних закрылись одновременно?

OrderCloseTime()
 
vik-777:

Добрый день подскажите пожалуйста вот есть код


который выберет последний ордер в истории с отрицательным профитом.

есть такая ситуация что одновременно закрывается 3 ордера, как понять что именно 3 последних закрылись одновременно?

пробовал делать цикл for но он находит все в истории ордера закрытые в убыток, а мне нужно только последний или последние в зависимости сколько их закрылось одновременно




Берете последний закрытый, сравниваете его время закрытия с предыдущим закрытым через OrderCloseTime(), если оно одно и тоже, то сравниваете его с временем закрытия предпредыдущего Вашего закрытого ордера... как то так, естественно, все это в цикле - от последнего закрытого к первому, последовательно идете и сравниваете время закрытий ордеров... еще - распринтуйте значения времени закрытия последних, заранее известных Вам ордеров, что они закрылись одновременно (по Вашему), допустим трех ордеров, не исключено, что оно будет различно, даже при Вашем понимании "одновременно", т.е. как я понимаю, на закрытие ордеров - в любом случае очередь идет на закрытие, т.е. реально время закрытия допустим трех сразу ордеров не может быть одно и тоже - Вы сами распринтуйте через Print() и посмотрите значения трех Ваших ОДНОВРЕМЕННЫХ ордеров - их значения характеристики OrderCloseTime(), т.е. не исключено, что будет необходимо вводить понятие ОДНОВРЕМЕННОСТИ закрытия, а именно - отклонение времени закрытия нескольких ордеров на какую-либо малую величину, когда еще можно считать, что они закрылись одновременно. Отсюда уже и "плясать"- сами поэкспериментируйте, посмотрите.
 

Беру помощь зала.

Как в OrderSelect() написать условие:

if(день открытия ордера != дню сегодняшнему)ticket=OrderTicket();

 
if(TimeDay(OrderOpenTime())!=TimeDay(CurrentTime()))ticket=OrderTicket();
 
ikatsko:

КАК БЫ ПО ХОДУ РАБОТЫ СОВЕТНИКА СЧИТАТЬ КОЛИЧЕСТВО ПРОФИТНЫХ ДЛИННЫХ ПОЗИЦИЙ И ОТДЕЛЬНО КОЛИЧЕСТВО ПРОФИТНЫХ КОРОТКИХ ПОЗИЦИЙ?

Стратегия предполагается такой: если количество профитных длинных позиций с начала работы советника (а лучше - за всю историю счета) больше, чем коротких, то разрешать открывать только длинные позиции. И наоборот.

Понятно как посчитать указанные сделки, если они закрываются советником: закрыли - посчитали. Но если позиция закрывается по ТР или SL, то ... ?

Может и готовый код функции у кого есть?

Ну так сравнивать в цикле по закрытым позициям цену их закрытия и цены их тейков и стопов:

OrderTakeProfit(); OrderStopLoss(); OrderClosePrice();

А ещё проще выбирать OP_BUY и OP_SELL и в отдельные четыре переменные записывать количество убыточных и прибыльных Бай и такие же Селл

if (OrderProfit()+OrderSwap()+OrderCommission()>0) { /* позиция прибыльная */ }
else { /* позиция убыточная */ }

 
Спасибо!
 

Все посмотрел.., все сделал... Не открывает позиции и все тут! Закрывает исправно но никак не открывает... Что делать - ума не приложу! Может кто найдет косяк в программе?

 
//+------------------------------------------------------------------+
//|                                                     DOKTRADE.mq4 |
//|                                                DOKSTER@YANDEX.RU |
//|                                                DOKSTER@YANDEX.RU |
//+------------------------------------------------------------------+
#property copyright "DOKSTER@YANDEX.RU"
#property link      "DOKSTER@YANDEX.RU"

   extern double LOT = 0.01;   // LOTS
   extern double KOF = 2;
   extern double SAF = 5;
   extern int    FRC = 144;
   extern double STL = 100;
   extern double TPF = 100;
   
   int start()
     
    { 


int CNT;

int DIG;

int TOTAL;
int SPREAD;

double SPR;
double SPRW;

double FRCU;
double FRCD;

double EMAH;
double EMAM;
double EMAL;

double OPEN;
double CLOSE;

double DFB;
double DFS;

double STLW = STL*Point;
double TPFW = TPF*Point;

double SAFW = SAF*Point;

EMAH = iMA(NULL,0,34,8,MODE_SMA,PRICE_HIGH,1);
EMAM = iMA(NULL,0,34,8,MODE_SMA,PRICE_MEDIAN,1);
EMAL = iMA(NULL,0,34,8,MODE_SMA,PRICE_LOW,1);

OPEN = iOpen(NULL,0,1);
CLOSE = iClose(NULL,0,1);

FRCU = High[iHighest(NULL,0,MODE_HIGH,FRC,1)];
FRCD = Low[iLowest(NULL,0,MODE_LOW,FRC,1)];

DFB = (CLOSE-FRCD);
DFS = (FRCU-CLOSE);

SPR = MarketInfo(Symbol(),MODE_SPREAD);
SPRW = (SPR*Point);

DIG = MarketInfo(Symbol(),MODE_DIGITS);

TOTAL = OrdersTotal();


if(TOTAL<1)

 { if (OPEN<EMAH&&CLOSE>EMAH)
   
   OrderSend(Symbol(),OP_BUY,LOT,Ask,3,0,0,"DOKTRADE",15775,0,Green);
  
 
   if (OPEN>EMAL&&CLOSE<EMAL)
 
   OrderSend(Symbol(),OP_SELL,LOT,Bid,3,0,0,"DOKTRADE",15885,0,Red);
  
  return(0);
 
    }
    
           
      
  for(CNT=0;CNT<TOTAL;CNT++)    
  
  {
      
  OrderSelect(CNT,SELECT_BY_POS,MODE_TRADES);
  
  {
  
  if (OrderType()==OP_BUY && OrderSymbol()==Symbol())   
                                             
      {
      
       if (OPEN>EMAL&&CLOSE<EMAL)    
     
        OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);
        
         if (OPEN>EMAM&&CLOSE>EMAM)
          
           OrderModify(OrderTicket(),OrderOpenPrice(),FRCD-SAFW,CLOSE+DFB,Green);
        
        return(0);
        
        }
        
  if (OrderType()==OP_SELL && OrderSymbol()==Symbol())
        
      {
       
         if (OPEN<EMAH&&CLOSE>EMAH)
         
         OrderClose(OrderTicket(),OrderLots(),Ask,3,Blue);
         
          if (OPEN<EMAM&&CLOSE<EMAM)
           
           OrderModify(OrderTicket(),OrderOpenPrice(),FRCU+(SAFW+SPRW),CLOSE-DFS,Red);
       
         return(0);
         
         }
          }
           }
            }
Причина обращения: