Piramiduję dość mocno i gęsto w różnych miejscach zróżnicowanym lotem.
Próbuję zrobić funkcję, która by mi liczyła odległość stopa tak, by był odległości, w której stracę procent z zarabianych aktualnie w piramidzie pieniędzy.
Jednym słowem mam porozrzucane zlecenia z różnym lotem, na których aktualnie zarabiam, dajmy na to, 1000zł. Chcę mieć stopa w takim miejscu, by w razie czego stracić tylko 20% tej kwoty, czyli 200zł.
To co aktualnie udało mi się łopatologicznie wymyślić.
Sumuję przemnożony dystans przebyty przez zlecenie x przez wartość w lotach tego zlecenia. Mnożę tą wartość przez procent. Następnie punkt(broker 5 cyfrowy) po punkcie sprawdzam, czy w tej odległości zarabiam tyle, ile chciałbym zarabiać. Później tą ilość pipsów, którą naliczyłem dodaję do wartości BE całej piramidy.
Jednym słowem działa, ale w momencie, kiedy co tick liczymy punkt po punkcie odległość, to każdy komputer ma prawo zwolnić. Przy odległości 100 pipsów/punktów mamy pętlę wywoływana 1000x....na tick...na jednej parze walutowej...
Tak to aktualnie wygląda.
Kod: Zaznacz cały
double GetRequiredDistance ( double percent) { //wrzucamy procent
double required.lot.distance = GetTotalLotDistance() * percent * 0.01; //GetLotDistance zwraca sumę pips*lot wszystkich zleceń
double calculated.lot.distance;
double pip = 1 * global.multiplier * Point; // otrzymujemy najmniejszą wartość ceny dostępną u brokera.
double step;
double distance;
while ( required.lot.distance >= calculated.lot.distance ) {
step += pip; //co pętlę dodajemy pips //
calculated.lot.distance = 0;
for ( int i = last.order; i >= 0; i-- ) { // last.order jest numerem na liście ostatniego zlecenia -1 //
if ( OrderSelect ( orders.var[i][0], SELECT_BY_TICKET, MODE_TRADES ) ) { // orders.var jest tablicą w których zapisane są wszelkie wartości każdego zlecenia. W tym wypadku czytujemy ticket.number według numeru.
if ( OrderSymbol() == symbol ) {
distance = + step;
calculated.lot.distance += distance * OrderLots();
}
}
}
}
return(step); //zwracaną wartość dodajemy do BE piramidy //
}