[Архив!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 2. - страница 441

 

Всем привет!

Что то никак не получается в торговый отчёт правильно вывести загрузку депозита. )) Делаю так:

#define RA 10000

if(Trade_Report == TRUE && !IsOptimization())
   {  int      pos;
      int      handle;
      int      Days;
      double   Swap_M;
      double   Profit_M;
      double   Swap_P;
      double   Profit_P;

      double   Source_LP[RA], LP_01[RA], LP_02[RA], LP_03[RA], LP_04[RA], LP_05[RA], LP_06[RA];
      double   Source_LP_02[RA], LP_01_02[RA], LP_02_02[RA], LP_03_02[RA], LP_04_02[RA], LP_05_02[RA], LP_06_02[RA];
      double   Source_SP[RA], SP_01[RA], SP_02[RA], SP_03[RA], SP_04[RA], SP_05[RA], SP_06[RA];
      double   Source_SP_02[RA], SP_01_02[RA], SP_02_02[RA], SP_03_02[RA], SP_04_02[RA], SP_05_02[RA], SP_06_02[RA];
      double   Load_Depo[RA]; 
   
      handle = FileOpen("OrdersReport.csv",FILE_CSV|FILE_WRITE);
   
      if(handle > 0)
                {//1
            FileWrite(handle,"Time Close"+","+"Lots"+","
                              +"Swap($)"+","+"Profit($)"+","+"Swap(p)"+","+"Profit(p)"+","+"Load Depo"+","
                              +"SOURCE_LP"+","+"LP#01"+","+"LP#02"+","+"LP#03"+","+"LP#04"+","+"LP#05"+","+"LP#06"+","
                              +"SOURCE_SP"+","+"SP#01"+","+"SP#02"+","+"SP#03"+","+"SP#04"+","+"SP#05"+","+"SP#06");
            for(pos = 0; pos < OrdersHistoryTotal(); pos++)
               {  OrderSelect(pos,SELECT_BY_POS,MODE_HISTORY); //2
               
                  if(OrderType() == OP_BUY && OrderMagicNumber() == Magic_Source_LP && OrderCloseTime() == TimeCurrent()) { Source_LP[pos] = OrderProfit(); }
                  if(OrderType() == OP_BUY && OrderMagicNumber() == Magic_LP01 && OrderCloseTime() == TimeCurrent()) { LP_01[pos] = OrderProfit(); }
                  if(OrderType() == OP_BUY && OrderMagicNumber() == Magic_LP02 && OrderCloseTime() == TimeCurrent()) { LP_02[pos] = OrderProfit(); }
                  if(OrderType() == OP_BUY && OrderMagicNumber() == Magic_LP03 && OrderCloseTime() == TimeCurrent()) { LP_03[pos] = OrderProfit(); }
                  if(OrderType() == OP_BUY && OrderMagicNumber() == Magic_LP04 && OrderCloseTime() == TimeCurrent()) { LP_04[pos] = OrderProfit(); }
                  if(OrderType() == OP_BUY && OrderMagicNumber() == Magic_LP05 && OrderCloseTime() == TimeCurrent()) { LP_05[pos] = OrderProfit(); }
                  if(OrderType() == OP_BUY && OrderMagicNumber() == Magic_LP06 && OrderCloseTime() == TimeCurrent()) { LP_06[pos] = OrderProfit(); }
                     
                  if(OrderType() == OP_SELL && OrderMagicNumber() == Magic_Source_SP && OrderCloseTime() == TimeCurrent()) { Source_SP[pos] = OrderProfit(); }
                  if(OrderType() == OP_SELL && OrderMagicNumber() == Magic_SP01 && OrderCloseTime() == TimeCurrent()) { SP_01[pos] = OrderProfit(); }
                  if(OrderType() == OP_SELL && OrderMagicNumber() == Magic_SP02 && OrderCloseTime() == TimeCurrent()) { SP_02[pos] = OrderProfit(); }
                  if(OrderType() == OP_SELL && OrderMagicNumber() == Magic_SP03 && OrderCloseTime() == TimeCurrent()) { SP_03[pos] = OrderProfit(); }
                  if(OrderType() == OP_SELL && OrderMagicNumber() == Magic_SP04 && OrderCloseTime() == TimeCurrent()) { SP_04[pos] = OrderProfit(); }
                  if(OrderType() == OP_SELL && OrderMagicNumber() == Magic_SP05 && OrderCloseTime() == TimeCurrent()) { SP_05[pos] = OrderProfit(); }
                  if(OrderType() == OP_SELL && OrderMagicNumber() == Magic_SP06 && OrderCloseTime() == TimeCurrent()) { SP_06[pos] = OrderProfit(); }
                  
            //--- Вычисление загрузки депозита ---//
                  int              Amount_LD;
                  datetime         CurrentCloseTime = OrderCloseTime();
                  static datetime  CloseTime;                  
                  
                  if(CurrentCloseTime != CloseTime)
                     { Amount_LD = 1;
                       Load_Depo[pos] = (Amount_LD*(OrderLots()*1000)/AccountBalance())*100;
                       CloseTime = OrderCloseTime(); }
                  else if(CurrentCloseTime == CloseTime)
                          { Amount_LD++;
                            Load_Depo[pos] = (Amount_LD*(OrderLots()*1000)/AccountBalance())*100;
                            CloseTime = OrderCloseTime(); }
            //---------------------------------------------------------------------------------------------------------------------
                     
                  Swap_M     =  OrderSwap();
                  Profit_M   =  OrderProfit();
                  Swap_P     = (OrderSwap()/10)/OrderLots();
                  Profit_P   = (OrderProfit()/10)/OrderLots()+(OrderSwap()/10)/OrderLots();
                     
                  if(OrderType() == OP_BUY || OrderType() == OP_SELL)
                     {   FileWrite(handle,TimeToStr(OrderCloseTime(),TIME_DATE|TIME_MINUTES)+","+DoubleToStr(OrderLots(),2)+"," //3
                                          
                                          +DoubleToStr(OrderSwap(),2)+","+DoubleToStr(Profit_M+Swap_M,2)+","+DoubleToStr(Swap_P,2)+","
                                          +DoubleToStr(Profit_P,2)+","+DoubleToStr(Load_Depo[pos],2)+","
                                          
                                          +DoubleToStr(Source_LP[pos],2)+","+DoubleToStr(LP_01[pos],2)+","+DoubleToStr(LP_02[pos],2)+","
                                          +DoubleToStr(LP_03[pos],2)+","
                                          +DoubleToStr(LP_04[pos],2)+","+DoubleToStr(LP_05[pos],2)+","+DoubleToStr(LP_06[pos],2)+","
                                             
                                          +DoubleToStr(Source_SP[pos],2)+","+DoubleToStr(SP_01[pos],2)+","+DoubleToStr(SP_02[pos],2)+","
                                          +DoubleToStr(SP_03[pos],2)+","
                                          +DoubleToStr(SP_04[pos],2)+","+DoubleToStr(SP_05[pos],2)+","+DoubleToStr(SP_06[pos],2));  } //3
               }  FileClose(handle); //2
         }//1

В итоге неправильно рассчитывается изначально. Значения в массиве Load_Depo постоянно меняются и нужно, чтобы открытые позиции тоже учитывались. Покажите пример, кто-нибудь, если есть свободная минутка. ))

 
demlin:
Честно нифига не понял, че то там сложно так все)))
Что даже примеры не помогают из тестового скрипта?
 
FreeSerfer:

Спасибо, смысл понятен, жаль что с языком программирования не очень сдружился.

Допустим:

Синий цвет - номер 0 - сигнал на покупку

Красный цвет - номер 1 - сигнал на продажу

и ещё вопрос, стрелка может мигать в процессе формирования бара над которым она может закрепиться и дать сигнал. Сделки должны открываться уже после явного сигнала когда бар сформирован

Кто нибудь может воплотить это в коде?

Вы учитесь программировать или ищете кто за вас это сделает?

Виктор уже дал вам понять, что нужно использовать ф-цию iCustom(). Почитайте о ней в справке метаедитора. Там всё подробно. Для того, чтобы избавиться от "дребезга" - используйте в iCustom() данные не нулевого, а первого бара - он уже полностью сформирован.

Вот когда начнёте хоть что-то писать сами, тогда вам тут с удовольствием помогут и поправят если что...

 
artmedia70:

Вы учитесь программировать или ищете кто за вас это сделает?

Виктор уже дал вам понять, что нужно использовать ф-цию iCustom(). Почитайте о ней в справке метаедитора. Там всё подробно. Для того, чтобы избавиться от "дребезга" - используйте в iCustom() данные не нулевого, а первого бара - он уже полностью сформирован.

Вот когда начнёте хоть что-то писать сами, тогда вам тут с удовольствием помогут и поправят если что...

пишу сам, хоть и с трудом мне это даётся, и единственное что осталось это привязка эксперта к индюку, хотя благодаря Виктору и она своими силами скоро решится. В любом случае всем спасибо кто отозвался и показал направление в котором нужно двигаться.
 
peshihod:

Вариантов может быть бесчисленное множество. Лучше выбирать простые. Например:


int Orderov;
int Tip;

//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
int i,k;

Orderov=OrdersTotal();

for(i=0;i<Orderov;i++)
{
OrderSelect(i,SELECT_BY_POS);

switch( OrderType() )
{
case OP_BUY:
//Задача для ордера типа OP_BUY
break;

case OP_SELL:
//Задача для ордера типа OP_BUY
break;

case OP_BUYLIMIT:
//Задача для ордера типа OP_BUY
break;

/////------ и т.д.




}
}

return(0);
}

Помогите....Ответьте на вопрос ..............

Вот эта часть срабатывает при каждом тике

case OP_BUY:
//Задача для ордера типа OP_BUY
break;

case OP_SELL:
//Задача для ордера типа OP_BUY
break;


А она должа срабатывать, только при каждом новом открытом ордере, один раз.

Наверное нужно какой нибудь счетчик прикрутить, по тикетам, магикам или другому индефикатору ордеров?

----------------------------------------------------------------------------------------

А обязательно делать переменную Orderov ?
Можно сделать так ?

for(i=0;i<OrdersTotal();i++)

В скрипте нужна переменная "k" ?

int i,k;

 
Zhunko:
Что даже примеры не помогают из тестового скрипта?
Спасибо за отклик, обошел проблему иначе, попроще ))
 
semiromid:

Вот эта часть срабатывает при каждом тике

case OP_BUY:
//Задача для ордера типа OP_BUY
break;

case OP_SELL:
//Задача для ордера типа OP_BUY
break;


А она должа срабатывать, только при каждом новом открытом ордере, один раз.

Наверное нужно какой нибудь счетчик прикрутить, по тикетам, магикам или другому индефикатору ордеров?

----------------------------------------------------------------------------------------

А обязательно делать переменную Orderov ?
Можно сделать так ?

for(i=0;i<OrdersTotal();i++)

В скрипте нужна переменная "k" ?

Всё не правильно понял.

Пытаешься сочинить поэзию на немецком языке, не зная ни одного слова. Так понятно пишу?

Читай справку, выучи все фукции и свойства языка. Потратишь пару месяцев. Разбери примеры, они есть при установке MetaTrader4, сам. Тогда пообщаемся. Пока не понимаешь о чем речь.

 
peshihod:

Всё не правильно понял.

Пытаешься сочинить поэзию на немецком языке, не зная ни одного слова. Так понятно пишу?

Читай справку, выучи все фукции и свойства языка. Потратишь пару месяцев. Разбери примеры, они есть при установке MetaTrader4, сам. Тогда пообщаемся. Пока не понимаешь о чем речь.


Я новичок в программировании, и учителей у меня нету . А если трудно вам ответить на вопросы которые для меня важны,могли бы ничего и не писать мне.

И обращаюсь я к вам на Вы, вообще то.....

 
semiromid:


Я новичок в программировании, и учителей у меня нету . А если трудно вам ответить на вопросы которые для меня важны,могли бы ничего и не писать мне.

И обращаюсь я к вам на Вы, вообще то.....


Прошу прощения.

Я писал о том, что нельзя научиться плавать на берегу.

 
peshihod:


Прошу прощения.

Я писал о том, что нельзя научиться плавать на берегу.


Иногда чтобы что то понять, нужно задавать вопросы .

int Orderov;
int Tip;

//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
int i,k;

Orderov=OrdersTotal();

for(i=0;i<Orderov;i++)
{
OrderSelect(i,SELECT_BY_POS);

switch( OrderType() )
{
case OP_BUY:
//Задача для ордера типа OP_BUY
break;

case OP_SELL:
//Задача для ордера типа OP_BUY
break;

case OP_BUYLIMIT:
//Задача для ордера типа OP_BUY
break;

/////------ и т.д.




}
}

return(0);
}

Помогите....Ответьте на вопрос ..............

Вот эта часть срабатывает при каждом тике

case OP_BUY:
//Задача для ордера типа OP_BUY
break;

case OP_SELL:
//Задача для ордера типа OP_BUY
break;


А она должа срабатывать, только при каждом новом открытом ордере, один раз.

Наверное нужно какой нибудь счетчик прикрутить, по тикетам, магикам или другому индефикатору ордеров, а может быть масивы? Подскажите хоть с чем это связано.Пока я этого не пойму я не смогу дальше двигаться .

----------------------------------------------------------------------------------------

А обязательно делать переменную Orderov ?
Можно сделать так ?

for(i=0;i<OrdersTotal();i++)

В скрипте нужна переменная "k" ?

int i,k;

Причина обращения: