Сохранение профита в переменную - страница 2

 
JRandomTrader #:

Поставьте флаг (булеву переменную), что значение уже сохранено, и если флаг стоит - больше не сохраняйте.

В правильном направлении думаете, но есть один момент...

Изначально флаг=0, что значит нет позиций соответствующих условию, как только появляется нужная позиция, профит сохраняется в переменную и флаг=1, и самое важное, что 2 позицию я уже выбрать не смогу потому что флаг=1, а если при отправке запроса сменить значение флага на 0, то переменная будет менять значение каждый тик.

 
Mikhail Gmyrov #:

В правильном направлении думаете, но есть один момент...

Изначально флаг=0, что значит нет позиций соответствующих условию, как только появляется нужная позиция, профит сохраняется в переменную и флаг=1, и самое важное, что 2 позицию я уже выбрать не смогу потому что флаг=1, а если при отправке запроса сменить значение флага на 0, то переменная будет менять значение каждый тик.

Ещё раз: заведите флаг для каждой позиции. Для удобства их можно объединить в структуры, а структуры - в массив.

Что-то типа такого:

struct PosState
  {
   long   Ticket;
   double Profit;
   bool   Saved;
  };

PosState Positions[];

Или, если это сложно, завести отдельные массивы:

   long   PosTicket[];
   double PosProfit[];
   bool   PosSaved[];
 
JRandomTrader #:

Ещё раз: заведите флаг для каждой позиции. Для удобства их можно объединить в структуры, а структуры - в массив.

Что-то типа такого:

Или, если это сложно, завести отдельные массивы:

//+------------------------------------------------------------------+
//| функция записи убыточных позиций в структуру
//+------------------------------------------------------------------+
void funcWriteToArray()
{
double arr[];
struct PosState //структура данных убыточных позиций 
  {
   long     Ticket; //тикет убыточной позиции
   double   Profit; //профит убыточной позиции
   double   Vol; //объем убыточной позиции
   //bool     Saved; //флаг на наличие убыточной позиции
  };

PosState Positions;

for(int i=PositionsTotal()-1;i>0;i--)
   {if(m_p.SelectByIndex(i))
      {if(m_p.Symbol()==Symbol())
         {ticketi=PositionGetInteger(POSITION_TICKET);
          profiti=+PositionGetDouble(POSITION_PROFIT)+PositionGetDouble(POSITION_SWAP);
          Obom=PositionGetDouble(POSITION_VOLUME);
          if(m_p.PositionType()==POSITION_TYPE_BUY)
            {
             if (profiti<0 && profiti<s_o) //выбор убыточных BUY
                {Print ("УБЫТОЧНЫЕ");
                 Positions.Ticket = ticketi;
                 Positions.Profit = profiti;
                 Positions.Vol = Obom;
                 PosState arr[10];
                 arr[0]=Positions;
                 arr[1]=Positions;
                 arr[2]=Positions;                 
                 arr[3]=Positions;              
                 ArrayPrint(arr);
                }
            }
          }
       }
    }
}//конец функции

выводятся вот в таком виде

хотя по условию убыточных больше (все которые меньше -2)

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

 
PosState Positions[];
int i, k;
ArrayResize(Positions,0,20);

// Заполняем массив
for(i=PositionsTotal()-1, k=0; i>0; i--)
   {
    Positions[k].Ticket=0;
    if(...)
      {
       ...
       ArrayResize(Positions,ArraySize(Positions)+1,20);
       Positions[k].Ticket=PositionGetInteger(POSITION_TICKET);
       Positions[k].Profit=PositionGetDouble(POSITION_PROFIT)+PositionGetDouble(POSITION_SWAP);
       Positions[k].Vol=PositionGetDouble(POSITION_VOLUME);
       k++;
      }
   }

//Проверяем массив
for(i=ArraySize(Positions)-1; i>0; i--)
   {
    if(Positions[i].ticket>0 && Positions[i].Profit<0.0) // Смотрим только убыточные
      {
       Printf("Тикет: %I64d  Прибыль: %f Объём: %f",Positions[i].Ticket, Positions[i].Profit, Positions[i].Vol);
      }
   }


Навскидку как-то так.

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