Mianowice:
Najprostszy w świecie kod, dający wizualna edycję zleceń, z tą różnicą, że hard_stop ma offset do linii.
Czyli taki LVOE + przestrzeń między liniami.
U brokerów z kwotowaniem 5 cyfrowym pojawia się problem z zaokrąglaniem do ostatniego miejsca po przecinku, czy inne cuda.
Najistotniejszy fragment kodu:
Kod: Zaznacz cały
int order_ticket = OrderTicket();
int old_take = NormalizeDouble( OrderTakeProfit(), Digits );
(...blablablablabla...)
if ( ObjectFind( StringConcatenate( tp_line_name, order_ticket ) ) != -1 ) {
name = StringConcatenate( tp_line_name, order_ticket );
soft_take = NormalizeDouble(ObjectGet( name, OBJPROP_PRICE1 ), Digits );
hard_take = NormalizeDouble(soft_take - hidden_pips * Point * global_multiplier, Digits);
if ( old_take != hard_take ){
Print( old_take, " != ", hard_take);
OrderModifyReliable ( order_ticket, OrderOpenPrice(), OrderStopLoss(), hard_take, 0, CLR_NONE );
}
}
MT4 i MQL mi wpiera że 1 != 1. Autentycznie boje się cokolwiek bardziej poważnego w tym pisać, czy to dla siebie, czy to dla kogoś. Ciężko wziąć odpowiedzialność za kod, gdy się dzieją takie kwiatki. Pojawia się pytanie, co się tam jeszcze kryje w czeluściach i jakie ciekawe błędy można jeszcze znaleźć.
2012.09.12 22:49:22 LibOrderReliable4 GBPUSD,M1: OrderModifyReliable v4.1: Suggest modifying code logic to avoid.
2012.09.12 22:49:22 LibOrderReliable4 GBPUSD,M1: OrderModifyReliable v4.1: Server reported OrderModify() did not change TP or SL: 5593927 GBPUSD@1.61057000 tp@1.62377000 sl@1.60417000
2012.09.12 22:49:22 LibOrderReliable4 GBPUSD,M1: OrderModifyReliable v4.1: Attempted modify of #5593927 price:1.61057000 sl:1.60417000 tp:1.62377000
2012.09.12 22:49:22 LibOrderReliable4 GBPUSD,M1: OrderModifyReliable v4.1:
2012.09.12 22:49:22 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx GBPUSD,M5: 1.6042 != 1.6042
Sytuacja nie ma miejsca zawsze. Jest niezależna od niczego. Z tego co mi świta, kiedyś wystarczyło dawać wszelkie wartosci 5cyfrowe w NormalizeDouble() i problem się rozwiązywał. Dziś to nie działa...