Haos писал(а):piter, при вставке в сообщение кода пользуйтесь соответствующем тегом "Code".
Спасибо за подсказку, сейчас по пробую исправить...
Глянул, а там уже всё исправлено, ещё раз, благодарю за корректировку!
Haos писал(а):piter, при вставке в сообщение кода пользуйтесь соответствующем тегом "Code".
piter писал(а):Haos писал(а):piter, при вставке в сообщение кода пользуйтесь соответствующем тегом "Code".
Спасибо за подсказку, сейчас по пробую исправить...
Kalkin писал(а):Да, тогда можно воспользоваться и тем подходом, что я показывал в предыдущей ветке. Сооружаем 4 массива: два для баев и два для селлов, по отдельности их заполняем тикетами и текущим профитом (OrderProfit()+OrderSwap()+OrderCommission()).
Затем сортируем той же пузыроковой сортировкой. Для тикетов будут целочисленные массивы, для текущего профита - с плавающей запятой.
piter писал(а):Прошу прощения, за прошлые посты, где лез в дебри науки....
Вы абсолютно правы, вот, что значит поспал пару часиков, и наконец дошло, что в прибыли уже всё учтено!!!
piter писал(а):piter писал(а):Прошу прощения, за прошлые посты, где лез в дебри науки....
Вы абсолютно правы, вот, что значит поспал пару часиков, и наконец дошло, что в прибыли уже всё учтено!!!
Рано радовался..., по ходу придётся полностью индюк переписывать, что-то не так делаю, а что не пойму...
Может, ребята, вы мне подскажете куда и как притулить сортировку ордеров в шапку, которую я в этой ветке выкладывал?
Kalkin писал(а):Придется ещё раз повторить:
шаг 1 - заполняем массивы тикетов и профитов данными;
шаг 2 - сортируем массивы по прибыли, но при перестановке элементов массива прибыли одновременно переставляем и элементы массива тикетов.
//========== КОЛИЧЕСТВО ПЕРЕКРЫВАЕМЫХ BUY (меняем величину b (положительное число) в первой строке) ========================================================================================================
if (tip==OP_BUY && b<=PerBUY-1) // Цикл, если тип ордер Buy,== Истина, если x равно y x == y
{
profit = NormalizeDouble(OrderProfit(),Digits)+OrderSwap()+OrderCommission();
price = NormalizeDouble(OrderOpenPrice(),Digits);
lot = OrderLots();
priceb[b,3]=OrderTicket();
priceb[b,2]= profit;
priceb[b,1]=lot;
priceb[b,0]=price;// MaxOrderBuy[b];//price;//MaxOrder[b];
// ArraySort(priceb,WHOLE_ARRAY,0,MODE_DESCEND);//ASCEND
//profit = NormalizeDouble(OrderProfit(),Digits)+OrderSwap()+OrderCommission();
//ProfswB += profsw;
ProfitB += priceb[b,2];// += Увеличение значения переменной у на x у += x y = y + x
price_b += priceb[b,0]*priceb[b,1];
// ярлычки для BUY,++ Добавление 1 к значению переменной y++ y = y + 1(здесь кол-во окрытых ордеров)
lot_b+=priceb[b,1]; // +=lot
b++;
// price = priceb[b];
ArraySort(priceb,WHOLE_ARRAY,0,MODE_DESCEND);//ASCEND
}
//====================КОЛИЧЕСТВО ПЕРЕКРЫВАЕМЫХ SELL (меняем величину s(положительное число) в первой строке) ===================================================================================
if (tip==OP_SELL && s<=PerSELL-1) // Цикл, если тип ордера SELL,== Истина, если x равно y x == y
{
profit = NormalizeDouble(OrderProfit(),Digits)+OrderSwap()+OrderCommission();
price = NormalizeDouble(OrderOpenPrice(),Digits);
lot = OrderLots();
prices[s,3] = OrderTicket();
prices[s,2] = profit;
prices[s,1] = lot;
prices[s,0] = price;//MinOrderSell[s];//price;//MaxOrder[s];//MinOrderSell[s];
// ArraySort(prices,WHOLE_ARRAY,s+1,MODE_ASCEND);
// ProfswS += profsw;
ProfitS += prices[s,2];
price_s += prices[s,0]*prices[s,1];
// ++ Добавление 1 к значению переменной y++ y = y + 1
lot_s+=prices[s,1];
s++;
//
// price = prices[s];
ArraySort(prices,WHOLE_ARRAY,s+1,MODE_ASCEND);
}
Ticket[n]=OrderTicket(); //OrderTicket Возвращает номер тикета для текущего выбранного ордера.
n++; //++ Добавление 1 к значению переменной y++ y = y + 1
if (tip==OP_BUYSTOP || tip==OP_BUYLIMIT) //Цикл для отложенных ордеров BUY, || ИЛИ(логическое ИЛИ) x < 5 || x > 7 ИСТИНА(1),если истинно любое из значений
{
price_bo += price*lot;
lot_bo+=lot;
bo++; //++ Добавление 1 к значению переменной y++ y = y + 1
}
if (tip==OP_SELLSTOP || tip==OP_SELLLIMIT) //Цикл для отложенных ордеров SELL,== Истина, если x равно y x == y
{
price_so += price*lot;
lot_so+=lot;
so++;
}
}
}
}
piter писал(а):Kalkin писал(а):Придется ещё раз повторить:
шаг 1 - заполняем массивы тикетов и профитов данными;
шаг 2 - сортируем массивы по прибыли, но при перестановке элементов массива прибыли одновременно переставляем и элементы массива тикетов.
Благодарю за сочувствие, полезнее было бы "пальцем ткнуть" место в шапке индюка, (или мордой ) шутка...
А теперь поделюсь конструктивом;-
В советнике без индикации стрелок и всякой инфы, можно было бы и по Вашему совету, няхай косит себе на здоровье, а вот в информационном индюке много привязок и к лотам, и профиту, и к тикетам, а так же и к цене..., хорошо, что ещё время на учёт не поставил, а то бы и его пришлось бы учитывать.
Перекопал пузырьковую сортировку разных конструкций, разных авторов, но многие даже прикрутить не смог к индюку...
Одним словом выкрутился я, создав двухмерный массив, с стандартной сортировкой ArraySort...
Часть кода индюка покажет нагляднее...
- Код: выделить все
//========== КОЛИЧЕСТВО ПЕРЕКРЫВАЕМЫХ BUY (меняем величину b (положительное число) в первой строке) ========================================================================================================
if (tip==OP_BUY && b<=PerBUY-1) // Цикл, если тип ордер Buy,== Истина, если x равно y x == y
{
profit = NormalizeDouble(OrderProfit(),Digits)+OrderSwap()+OrderCommission();
price = NormalizeDouble(OrderOpenPrice(),Digits);
lot = OrderLots();
priceb[b,3]=OrderTicket();
priceb[b,2]= profit;
priceb[b,1]=lot;
priceb[b,0]=price;// MaxOrderBuy[b];//price;//MaxOrder[b];
// ArraySort(priceb,WHOLE_ARRAY,0,MODE_DESCEND);//ASCEND
//profit = NormalizeDouble(OrderProfit(),Digits)+OrderSwap()+OrderCommission();
//ProfswB += profsw;
ProfitB += priceb[b,2];// += Увеличение значения переменной у на x у += x y = y + x
price_b += priceb[b,0]*priceb[b,1];
// ярлычки для BUY,++ Добавление 1 к значению переменной y++ y = y + 1(здесь кол-во окрытых ордеров)
lot_b+=priceb[b,1]; // +=lot
b++;
// price = priceb[b];
ArraySort(priceb,WHOLE_ARRAY,0,MODE_DESCEND);//ASCEND
}
//====================КОЛИЧЕСТВО ПЕРЕКРЫВАЕМЫХ SELL (меняем величину s(положительное число) в первой строке) ===================================================================================
if (tip==OP_SELL && s<=PerSELL-1) // Цикл, если тип ордера SELL,== Истина, если x равно y x == y
{
profit = NormalizeDouble(OrderProfit(),Digits)+OrderSwap()+OrderCommission();
price = NormalizeDouble(OrderOpenPrice(),Digits);
lot = OrderLots();
prices[s,3] = OrderTicket();
prices[s,2] = profit;
prices[s,1] = lot;
prices[s,0] = price;//MinOrderSell[s];//price;//MaxOrder[s];//MinOrderSell[s];
// ArraySort(prices,WHOLE_ARRAY,s+1,MODE_ASCEND);
// ProfswS += profsw;
ProfitS += prices[s,2];
price_s += prices[s,0]*prices[s,1];
// ++ Добавление 1 к значению переменной y++ y = y + 1
lot_s+=prices[s,1];
s++;
//
// price = prices[s];
ArraySort(prices,WHOLE_ARRAY,s+1,MODE_ASCEND);
}
Ticket[n]=OrderTicket(); //OrderTicket Возвращает номер тикета для текущего выбранного ордера.
n++; //++ Добавление 1 к значению переменной y++ y = y + 1
if (tip==OP_BUYSTOP || tip==OP_BUYLIMIT) //Цикл для отложенных ордеров BUY, || ИЛИ(логическое ИЛИ) x < 5 || x > 7 ИСТИНА(1),если истинно любое из значений
{
price_bo += price*lot;
lot_bo+=lot;
bo++; //++ Добавление 1 к значению переменной y++ y = y + 1
}
if (tip==OP_SELLSTOP || tip==OP_SELLLIMIT) //Цикл для отложенных ордеров SELL,== Истина, если x равно y x == y
{
price_so += price*lot;
lot_so+=lot;
so++;
}
}
}
}
if(OrderSymbol()==Symbol() && OrderType()==OP_BUY) // Цикл, если тип ордера SELL,== Истина, если x равно y x == y
{
tip = OrderType(); // OrderType() возвращает тип ордера
profit = NormalizeDouble(OrderProfit(),Digits)+OrderSwap()+OrderCommission();
price = NormalizeDouble(OrderOpenPrice(),Digits);
lot = OrderLots();
Tick = OrderTicket();
priceb[bk,3] = Tick;
priceb[bk,2] = profit;
priceb[bk,1] = lot;
priceb[bk,0] = price;
for( i=OrdersTotal();i>=0;i--)
{
if (OrderSymbol()==Symbol() && OrderType()==OP_BUY && (Magic == OrderMagicNumber() || Magic == -1))
{
for ( p=bk;p>=0; p--) {
for ( k=0; k<p; k++) {
if (priceb[k,0]<priceb[k+1,0]) { // > - по возрастанию, < - поубыванию
for ( e=0; e<4; e++) { //кол-во колонок
t=priceb[k,e];
priceb[k,e]=priceb[k+1,e];
priceb[k+1,e]=t;
}
}
}
}
}
}
piter писал(а):Пришла хорошая мысль, может кому интересно потестить и высказаться по косякам в индюке, то милости прошу, тестите на здоровье... а может кому и пользу принесёт, буду только рад...
Прикладываю инструкцию и индюк
piter писал(а):Пришла хорошая мысль, может кому интересно потестить и высказаться по косякам в индюке, то милости прошу, тестите на здоровье... а может кому и пользу принесёт, буду только рад...
Прикладываю инструкцию и индюк
MyBezybytok v1.2.3.ex4
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 63
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения