Не правильно работает Торговый приказ на модификацию уровней StopLoss и/или TakeProfit на хеджинговых счетах. модифицирует первую позицию по символу если открыто несколько, и то не поймешь как.
В логе эксперта пишет
22:44:48.963 test_05 (EURUSD,H1) EURUSD: ID = 79594479 OO 0 22:44:48.963 test_05 (EURUSD,H1) EURUSD: ResultDeal() = 65376504 QG 0 22:45:09.283 test_05 (EURUSD,H1) EURUSD: ID = 79594534 JO 0 22:45:09.283 test_05 (EURUSD,H1) EURUSD: ResultDeal() = 65376560 NP 0 22:45:10.440 test_05 (EURUSD,H1) CTrade::OrderSend: modify position #79594479 EURUSD (sl: 0.00000, tp: 1.11905) [no changes] FP 0 22:45:10.459 test_05 (EURUSD,H1) CTrade::OrderSend: modify position #79594479 EURUSD (sl: 1.11305, tp: 0.00000) [no changes] GQ 0 22:45:10.931 test_05 (EURUSD,H1) CTrade::OrderSend: modify position #79594479 EURUSD (sl: 0.00000, tp: 1.11905) [no changes] LQ 0 22:45:10.969 test_05 (EURUSD,H1) CTrade::OrderSend: modify position #79594479 EURUSD (sl: 1.11305, tp: 0.00000) [no changes] CQ 0 22:45:13.330 test_05 (EURUSD,H1) CTrade::OrderSend: modify position #79594479 EURUSD (sl: 0.00000, tp: 1.11905) [no changes] ER 0 22:45:13.534 test_05 (EURUSD,H1) CTrade::OrderSend: modify position #79594479 EURUSD (sl: 1.11305, tp: 0.00000) [no changes] FR 0 22:45:14.981 test_05 (EURUSD,H1) CTrade::OrderSend: modify position #79594479 EURUSD (sl: 0.00000, tp: 1.11905) [no changes] OS 0 22:45:15.631 test_05 (EURUSD,H1) CTrade::OrderSend: modify position #79594479 EURUSD (sl: 0.00000, tp: 1.11905) [no changes] FS 0 22:45:15.747 test_05 (EURUSD,H1) CTrade::OrderSend: modify position #79594479 EURUSD (sl: 1.11306, tp: 0.00000) [no changes] MS 0 22:45:19.731 test_05 (EURUSD,H1) CTrade::OrderSend: modify position #79594479 EURUSD (sl: 0.00000, tp: 1.11902) [no changes] PL 0 22:45:21.531 test_05 (EURUSD,H1) CTrade::OrderSend: modify position #79594479 EURUSD (sl: 0.00000, tp: 1.11902) [no changes] ML 0 22:45:21.589 test_05 (EURUSD,H1) CTrade::OrderSend: modify position #79594479 EURUSD (sl: 1.11306, tp: 0.00000) [no changes] PL 0 22:45:22.810 test_05 (EURUSD,H1) CTrade::OrderSend: modify position #79594479 EURUSD (sl: 0.00000, tp: 1.11903) [no changes] QM 0 22:45:22.916 test_05 (EURUSD,H1) CTrade::OrderSend: modify position #79594479 EURUSD (sl: 1.11307, tp: 0.00000) [no changes] IN 0 22:45:23.312 test_05 (EURUSD,H1) CTrade::PositionModify: MQL5 program is stopped. Trading is disabled
в Журнале
MD 0 22:45:06.591 Experts expert test_05 (EURUSD,H1) loaded successfully JN 0 22:45:09.107 Trades '3247769': instant buy 0.01 EURUSD at 1.11620 (deviation: 10) PJ 0 22:45:09.281 Trades '3247769': deal #65376560 buy 0.01 EURUSD at 1.11620 done (based on order #79594534) KJ 0 22:45:09.283 Trades '3247769': order #79594534 buy 0.01 / 0.01 EURUSD at 1.11620 done in 176 ms HG 0 22:45:09.285 Trades '3247769': modify #79594479 buy 0.01 EURUSD sl: 1.11302, tp: 1.11902 -> sl: 1.11305, tp: 0.00000 LQ 0 22:45:09.480 Trades '3247769': modify #79594479 buy 0.01 EURUSD -> sl: 1.11305, tp: 0.00000 done in 195 ms KR 0 22:45:09.481 Trades '3247769': modify #79594479 buy 0.01 EURUSD sl: 1.11305, tp: 0.00000 -> sl: 0.00000, tp: 1.11905 MR 0 22:45:09.670 Trades '3247769': modify #79594479 buy 0.01 EURUSD -> sl: 0.00000, tp: 1.11905 done in 188 ms EL 0 22:45:09.807 Trades '3247769': modify #79594479 buy 0.01 EURUSD sl: 0.00000, tp: 1.11905 -> sl: 1.11305, tp: 0.00000 JL 0 22:45:09.987 Trades '3247769': modify #79594479 buy 0.01 EURUSD -> sl: 1.11305, tp: 0.00000 done in 180 ms PO 0 22:45:09.989 Trades '3247769': modify #79594479 buy 0.01 EURUSD sl: 1.11305, tp: 0.00000 -> sl: 0.00000, tp: 1.11905 PI 0 22:45:10.178 Trades '3247769': modify #79594479 buy 0.01 EURUSD -> sl: 0.00000, tp: 1.11905 done in 188 ms CI 0 22:45:10.261 Trades '3247769': modify #79594479 buy 0.01 EURUSD sl: 0.00000, tp: 1.11905 -> sl: 1.11305, tp: 0.00000 RK 0 22:45:10.440 Trades '3247769': modify #79594479 buy 0.01 EURUSD -> sl: 1.11305, tp: 0.00000 done in 179 ms CI 0 22:45:10.440 Trades '3247769': modify #79594479 buy 0.01 EURUSD sl: 0.00000, tp: 1.11905 -> sl: 0.00000, tp: 1.11905 skipped as it changes nothing MD 0 22:45:10.459 Trades '3247769': modify #79594479 buy 0.01 EURUSD sl: 1.11305, tp: 0.00000 -> sl: 1.11305, tp: 0.00000 skipped as it changes nothing MN 0 22:45:10.461 Trades '3247769': modify #79594479 buy 0.01 EURUSD sl: 1.11305, tp: 0.00000 -> sl: 0.00000, tp: 1.11905 OO 0 22:45:10.631 Trades '3247769': modify #79594479 buy 0.01 EURUSD -> sl: 0.00000, tp: 1.11905 done in 170 ms RH 0 22:45:10.718 Trades '3247769': modify #79594479 buy 0.01 EURUSD sl: 0.00000, tp: 1.11905 -> sl: 1.11305, tp: 0.00000 JH 0 22:45:10.930 Trades '3247769': modify #79594479 buy 0.01 EURUSD -> sl: 1.11305, tp: 0.00000 done in 212 ms RF 0 22:45:10.931 Trades '3247769': modify #79594479 buy 0.01 EURUSD sl: 0.00000, tp: 1.11905 -> sl: 0.00000, tp: 1.11905 skipped as it changes nothing DE 0 22:45:10.968 Trades '3247769': modify #79594479 buy 0.01 EURUSD sl: 1.11305, tp: 0.00000 -> sl: 1.11305, tp: 0.00000 skipped as it changes nothing NL 0 22:45:10.970 Trades '3247769': modify #79594479 buy 0.01 EURUSD sl: 1.11305, tp: 0.00000 -> sl: 0.00000, tp: 1.11905 DL 0 22:45:11.187 Trades '3247769': modify #79594479 buy 0.01 EURUSD -> sl: 0.00000, tp: 1.11905 done in 217 ms PO 0 22:45:11.230 Trades '3247769': modify #79594479 buy 0.01 EURUSD sl: 0.00000, tp: 1.11905 -> sl: 1.11305, tp: 0.00000 MI 0 22:45:11.440 Trades '3247769': modify #79594479 buy 0.01 EURUSD -> sl: 1.11305, tp: 0.00000 done in 210 ms JI 0 22:45:11.443 Trades '3247769': modify #79594479 buy 0.01 EURUSD sl: 1.11305, tp: 0.00000 -> sl: 0.00000, tp: 1.11905 HK 0 22:45:11.637 Trades '3247769': modify #79594479 buy 0.01 EURUSD -> sl: 0.00000, tp: 1.11905 done in 194 ms LD 0 22:45:11.720 Trades '3247769': modify #79594479 buy 0.01 EURUSD sl: 0.00000, tp: 1.11905 -> sl: 1.11305, tp: 0.00000 LD 0 22:45:11.901 Trades '3247769': modify #79594479 buy 0.01 EURUSD -> sl: 1.11305, tp: 0.00000 done in 181 ms LF 0 22:45:11.904 Trades '3247769': modify #79594479 buy 0.01 EURUSD sl: 1.11305, tp: 0.00000 -> sl: 0.00000, tp: 1.11905 RF 0 22:45:12.090 Trades '3247769': modify #79594479 buy 0.01 EURUSD -> sl: 0.00000, tp: 1.11905 done in 187 ms EQ 0 22:45:12.148 Trades '3247769': modify #79594479 buy 0.01 EURUSD sl: 0.00000, tp: 1.11905 -> sl: 1.11305, tp: 0.00000 DS 0 22:45:12.330 Trades '3247769': modify #79594479 buy 0.01 EURUSD -> sl: 1.11305, tp: 0.00000 done in 182 ms GS 0 22:45:12.333 Trades '3247769': modify #79594479 buy 0.01 EURUSD sl: 1.11305, tp: 0.00000 -> sl: 0.00000, tp: 1.11905 PM 0 22:45:12.532 Trades '3247769': modify #79594479 buy 0.01 EURUSD -> sl: 0.00000, tp: 1.11905 done in 199 ms LN 0 22:45:12.723 Trades '3247769': modify #79594479 buy 0.01 EURUSD sl: 0.00000, tp: 1.11905 -> sl: 1.11305, tp: 0.00000 FN 0 22:45:12.922 Trades '3247769': modify #79594479 buy 0.01 EURUSD -> sl: 1.11305, tp: 0.00000 done in 198 ms RH 0 22:45:12.923 Trades '3247769': modify #79594479 buy 0.01 EURUSD sl: 1.11305, tp: 0.00000 -> sl: 0.00000, tp: 1.11905 HH 0 22:45:13.102 Trades '3247769': modify #79594479 buy 0.01 EURUSD -> sl: 0.00000, tp: 1.11905 done in 179 ms QK 0 22:45:13.132 Trades '3247769': modify #79594479 buy 0.01 EURUSD sl: 0.00000, tp: 1.11905 -> sl: 1.11305, tp: 0.00000 NE 0 22:45:13.330 Trades '3247769': modify #79594479 buy 0.01 EURUSD -> sl: 1.11305, tp: 0.00000 done in 198 ms NH 0 22:45:13.330 Trades '3247769': modify #79594479 buy 0.01 EURUSD sl: 0.00000, tp: 1.11905 -> sl: 0.00000, tp: 1.11905 skipped as it changes nothing NG 0 22:45:13.534 Trades '3247769': modify #79594479 buy 0.01 EURUSD sl: 1.11305, tp: 0.00000 -> sl: 1.11305, tp: 0.00000 skipped as it changes nothing EO 0 22:45:13.536 Trades '3247769': modify #79594479 buy 0.01 EURUSD sl: 1.11305, tp: 0.00000 -> sl: 0.00000, tp: 1.11905 KI 0 22:45:13.790 Trades '3247769': modify #79594479 buy 0.01 EURUSD -> sl: 0.00000, tp: 1.11905 done in 254 ms RJ 0 22:45:14.046 Trades '3247769': modify #79594479 buy 0.01 EURUSD sl: 0.00000, tp: 1.11905 -> sl: 1.11305, tp: 0.00000 CK 0 22:45:14.211 Trades '3247769': modify #79594479 buy 0.01 EURUSD -> sl: 1.11305, tp: 0.00000 done in 165 ms ED 0 22:45:14.214 Trades '3247769': modify #79594479 buy 0.01 EURUSD sl: 1.11305, tp: 0.00000 -> sl: 0.00000, tp: 1.11905 KD 0 22:45:14.381 Trades '3247769': modify #79594479 buy 0.01 EURUSD -> sl: 0.00000, tp: 1.11905 done in 167 ms QG 0 22:45:14.416 Trades '3247769': modify #79594479 buy 0.01 EURUSD sl: 0.00000, tp: 1.11905 -> sl: 1.11305, tp: 0.00000 NF 0 22:45:14.602 Trades '3247769': modify #79594479 buy 0.01 EURUSD -> sl: 1.11305, tp: 0.00000 done in 186 ms JQ 0 22:45:14.604 Trades '3247769': modify #79594479 buy 0.01 EURUSD sl: 1.11305, tp: 0.00000 -> sl: 0.00000, tp: 1.11905 PS 0 22:45:14.781 Trades '3247769': modify #79594479 buy 0.01 EURUSD -> sl: 0.00000, tp: 1.11905 done in 177 ms EL 0 22:45:14.816 Trades '3247769': modify #79594479 buy 0.01 EURUSD sl: 0.00000, tp: 1.11905 -> sl: 1.11305, tp: 0.00000 FM 0 22:45:14.981 Trades '3247769': modify #79594479 buy 0.01 EURUSD -> sl: 1.11305, tp: 0.00000 done in 164 ms KS 0 22:45:14.981 Trades '3247769': modify #79594479 buy 0.01 EURUSD sl: 0.00000, tp: 1.11905 -> sl: 0.00000, tp: 1.11905 skipped as it changes nothing OS 0 22:45:15.056 Trades '3247769': modify #79594479 buy 0.01 EURUSD sl: 1.11305, tp: 0.00000 -> sl: 1.11306, tp: 0.00000 QM 0 22:45:15.230 Trades '3247769': modify #79594479 buy 0.01 EURUSD -> sl: 1.11306, tp: 0.00000 done in 175 ms RN 0 22:45:15.233 Trades '3247769': modify #79594479 buy 0.01 EURUSD sl: 1.11306, tp: 0.00000 -> sl: 0.00000, tp: 1.11905 NO 0 22:45:15.421 Trades '3247769': modify #79594479 buy 0.01 EURUSD -> sl: 0.00000, tp: 1.11905 done in 188 ms JH 0 22:45:15.442 Trades '3247769': modify #79594479 buy 0.01 EURUSD sl: 0.00000, tp: 1.11905 -> sl: 1.11306, tp: 0.00000 LH 0 22:45:15.631 Trades '3247769': modify #79594479 buy 0.01 EURUSD -> sl: 1.11306, tp: 0.00000 done in 188 ms JF 0 22:45:15.631 Trades '3247769': modify #79594479 buy 0.01 EURUSD sl: 0.00000, tp: 1.11905 -> sl: 0.00000, tp: 1.11905 skipped as it changes nothing KR 0 22:45:15.746 Trades '3247769': modify #79594479 buy 0.01 EURUSD sl: 1.11306, tp: 0.00000 -> sl: 1.11306, tp: 0.00000 skipped as it changes nothing LL 0 22:45:15.748 Trades '3247769': modify #79594479 buy 0.01 EURUSD sl: 1.11306, tp: 0.00000 -> sl: 0.00000, tp: 1.11906 FL 0 22:45:15.930 Trades '3247769': modify #79594479 buy 0.01 EURUSD -> sl: 0.00000, tp: 1.11906 done in 182 ms LO 0 22:45:16.003 Trades '3247769': modify #79594479 buy 0.01 EURUSD sl: 0.00000, tp: 1.11906 -> sl: 1.11305, tp: 0.00000 ON 0 22:45:16.201 Trades '3247769': modify #79594479 buy 0.01 EURUSD -> sl: 1.11305, tp: 0.00000 done in 197 ms FI 0 22:45:16.203 Trades '3247769': modify #79594479 buy 0.01 EURUSD sl: 1.11305, tp: 0.00000 -> sl: 0.00000, tp: 1.11906 HK 0 22:45:16.390 Trades '3247769': modify #79594479 buy 0.01 EURUSD -> sl: 0.00000, tp: 1.11906 done in 187 ms GD 0 22:45:16.397 Trades '3247769': modify #79594479 buy 0.01 EURUSD sl: 0.00000, tp: 1.11906 -> sl: 1.11306, tp: 0.00000 GE 0 22:45:16.640 Trades '3247769': modify #79594479 buy 0.01 EURUSD -> sl: 1.11306, tp: 0.00000 done in 243 ms NF 0 22:45:16.641 Trades '3247769': modify #79594479 buy 0.01 EURUSD sl: 0.00000, tp: 1.11906 -> sl: 0.00000, tp: 1.11905 RF 0 22:45:16.817 Trades '3247769': modify #79594479 buy 0.01 EURUSD -> sl: 0.00000, tp: 1.11905 done in 175 ms GQ 0 22:45:16.915 Trades '3247769': modify #79594479 buy 0.01 EURUSD sl: 0.00000, tp: 1.11905 -> sl: 1.11305, tp: 0.00000 NP 0 22:45:17.090 Trades '3247769': modify #79594479 buy 0.01 EURUSD -> sl: 1.11305, tp: 0.00000 done in 175 ms MS 0 22:45:17.093 Trades '3247769': modify #79594479 buy 0.01 EURUSD sl: 1.11305, tp: 0.00000 -> sl: 0.00000, tp: 1.11905 LM 0 22:45:17.261 Trades '3247769': modify #79594479 buy 0.01 EURUSD -> sl: 0.00000, tp: 1.11905 done in 168 ms NN 0 22:45:17.426 Trades '3247769': modify #79594479 buy 0.01 EURUSD sl: 0.00000, tp: 1.11905 -> sl: 1.11306, tp: 0.00000 NO 0 22:45:17.607 Trades '3247769': modify #79594479 buy 0.01 EURUSD -> sl: 1.11306, tp: 0.00000 done in 181 ms JH 0 22:45:17.610 Trades '3247769': modify #79594479 buy 0.01 EURUSD sl: 1.11306, tp: 0.00000 -> sl: 0.00000, tp: 1.11906 LH 0 22:45:17.787 Trades '3247769': modify #79594479 buy 0.01 EURUSD -> sl: 0.00000, tp: 1.11906 done in 177 ms IK 0 22:45:17.925 Trades '3247769': modify #79594479 buy 0.01 EURUSD sl: 0.00000, tp: 1.11906 -> sl: 1.11306, tp: 0.00000 MJ 0 22:45:18.171 Trades '3247769': modify #79594479 buy 0.01 EURUSD -> sl: 1.11306, tp: 0.00000 done in 246 ms FE 0 22:45:18.173 Trades '3247769': modify #79594479 buy 0.01 EURUSD sl: 0.00000, tp: 1.11906 -> sl: 0.00000, tp: 1.11905 LG 0 22:45:18.377 Trades '3247769': modify #79594479 buy 0.01 EURUSD -> sl: 0.00000, tp: 1.11905 done in 204 ms EP 0 22:45:18.410 Trades '3247769': modify #79594479 buy 0.01 EURUSD sl: 0.00000, tp: 1.11905 -> sl: 1.11305, tp: 0.00000 NQ 0 22:45:18.591 Trades '3247769': modify #79594479 buy 0.01 EURUSD -> sl: 1.11305, tp: 0.00000 done in 181 ms FR 0 22:45:18.593 Trades '3247769': modify #79594479 buy 0.01 EURUSD sl: 1.11305, tp: 0.00000 -> sl: 0.00000, tp: 1.11906 ER 0 22:45:18.782 Trades '3247769': modify #79594479 buy 0.01 EURUSD -> sl: 0.00000, tp: 1.11906 done in 189 ms HM 0 22:45:18.928 Trades '3247769': modify #79594479 buy 0.01 EURUSD sl: 0.00000, tp: 1.11906 -> sl: 1.11307, tp: 0.00000 ML 0 22:45:19.117 Trades '3247769': modify #79594479 buy 0.01 EURUSD -> sl: 1.11307, tp: 0.00000 done in 189 ms EO 0 22:45:19.119 Trades '3247769': modify #79594479 buy 0.01 EURUSD sl: 1.11307, tp: 0.00000 -> sl: 0.00000, tp: 1.11902 EI 0 22:45:19.347 Trades '3247769': modify #79594479 buy 0.01 EURUSD -> sl: 0.00000, tp: 1.11902 done in 228 ms GJ 0 22:45:19.546 Trades '3247769': modify #79594479 buy 0.01 EURUSD sl: 0.00000, tp: 1.11902 -> sl: 1.11307, tp: 0.00000 GK 0 22:45:19.730 Trades '3247769': modify #79594479 buy 0.01 EURUSD -> sl: 1.11307, tp: 0.00000 done in 184 ms II 0 22:45:19.731 Trades '3247769': modify #79594479 buy 0.01 EURUSD sl: 0.00000, tp: 1.11902 -> sl: 0.00000, tp: 1.11902 skipped as it changes nothing OI 0 22:45:19.759 Trades '3247769': modify #79594479 buy 0.01 EURUSD sl: 1.11307, tp: 0.00000 -> sl: 1.11302, tp: 0.00000 HK 0 22:45:19.941 Trades '3247769': modify #79594479 buy 0.01 EURUSD -> sl: 1.11302, tp: 0.00000 done in 182 ms OD 0 22:45:19.944 Trades '3247769': modify #79594479 buy 0.01 EURUSD sl: 1.11302, tp: 0.00000 -> sl: 0.00000, tp: 1.11907 EE 0 22:45:20.130 Trades '3247769': modify #79594479 buy 0.01 EURUSD -> sl: 0.00000, tp: 1.11907 done in 186 ms JF 0 22:45:20.365 Trades '3247769': modify #79594479 buy 0.01 EURUSD sl: 0.00000, tp: 1.11907 -> sl: 1.11302, tp: 0.00000 GF 0 22:45:20.550 Trades '3247769': modify #79594479 buy 0.01 EURUSD -> sl: 1.11302, tp: 0.00000 done in 185 ms KQ 0 22:45:20.552 Trades '3247769': modify #79594479 buy 0.01 EURUSD sl: 1.11302, tp: 0.00000 -> sl: 0.00000, tp: 1.11902 KP 0 22:45:20.740 Trades '3247769': modify #79594479 buy 0.01 EURUSD -> sl: 0.00000, tp: 1.11902 done in 188 ms ES 0 22:45:20.858 Trades '3247769': modify #79594479 buy 0.01 EURUSD sl: 0.00000, tp: 1.11902 -> sl: 1.11307, tp: 0.00000 FM 0 22:45:21.050 Trades '3247769': modify #79594479 buy 0.01 EURUSD -> sl: 1.11307, tp: 0.00000 done in 192 ms KN 0 22:45:21.053 Trades '3247769': modify #79594479 buy 0.01 EURUSD sl: 1.11307, tp: 0.00000 -> sl: 0.00000, tp: 1.11902 IO 0 22:45:21.247 Trades '3247769': modify #79594479 buy 0.01 EURUSD -> sl: 0.00000, tp: 1.11902 done in 194 ms GH 0 22:45:21.298 Trades '3247769': modify #79594479 buy 0.01 EURUSD sl: 0.00000, tp: 1.11902 -> sl: 1.11306, tp: 0.00000 LH 0 22:45:21.530 Trades '3247769': modify #79594479 buy 0.01 EURUSD -> sl: 1.11306, tp: 0.00000 done in 233 ms DF 0 22:45:21.531 Trades '3247769': modify #79594479 buy 0.01 EURUSD sl: 0.00000, tp: 1.11902 -> sl: 0.00000, tp: 1.11902 skipped as it changes nothing DE 0 22:45:21.588 Trades '3247769': modify #79594479 buy 0.01 EURUSD sl: 1.11306, tp: 0.00000 -> sl: 1.11306, tp: 0.00000 skipped as it changes nothing RL 0 22:45:23.317 Experts expert test_05 (EURUSD,H1) removed
Тестовый код
//+------------------------------------------------------------------+ //| test_05.mq5 | //| Sergey Gritsay | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Sergey Gritsay" #property link "https://www.mql5.com" #property version "1.00" #include <Trade\Trade.mqh> #include<Trade\AccountInfo.mqh> //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ enum ENUM_TYPE { BUY=ORDER_TYPE_BUY, SELL=ORDER_TYPE_SELL }; input ulong Magic=12; input ENUM_TYPE Type_open=BUY; input double Lot=0.01; input int SL=300; input int TP=300; input bool TrailingStop=false; CTrade trade; CAccountInfo AccountInfo; bool flag_open=true; long ID=0; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- trade.SetExpertMagicNumber(Magic); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- if(flag_open) if(Open(_Symbol,(ENUM_ORDER_TYPE)Type_open,Lot))flag_open=false; ModifySL(_Symbol,(double)SL); ModifyTP(_Symbol,(double)TP); Event(_Symbol,Lot); } //+------------------------------------------------------------------+ bool Open(string symbol,ENUM_ORDER_TYPE type,double Volume) { int digits=(int)SymbolInfoInteger(symbol,SYMBOL_DIGITS); Volume=volume_n(symbol,Volume); if(type==ORDER_TYPE_BUY) { double ask=NormalizeDouble(SymbolInfoDouble(symbol,SYMBOL_ASK),digits); if(NormalizeDouble(normalize(symbol,ask),digits)!=ask)return(false); if(AccountInfo.FreeMarginCheck(symbol,type,Volume,ask)<=0.0)return(false); trade.Buy(Volume,symbol,ask); } if(type==ORDER_TYPE_SELL) { double bid=NormalizeDouble(SymbolInfoDouble(symbol,SYMBOL_BID),digits); if(NormalizeDouble(normalize(symbol,bid),digits)!=bid)return(false); if(AccountInfo.FreeMarginCheck(symbol,type,Volume,bid)<=0.0)return(false); trade.Sell(Volume,symbol,bid); } if(trade.ResultRetcode()==TRADE_RETCODE_DONE || trade.ResultRetcode()==TRADE_RETCODE_DONE_PARTIAL) { ID=PositionID(trade.ResultDeal()); Print(symbol,": ID = ",ID); Print(symbol,": ResultDeal() = ",trade.ResultDeal()); return(true); } else return(false); } //+------------------------------------------------------------------+ long PositionID(ulong tiket) { ulong deal_ticket=tiket; if(HistorySelect(0,TimeCurrent())) { int deals=HistoryDealsTotal(); for(int i=0;i<deals;i++) { deal_ticket=HistoryDealGetTicket(i); if(deal_ticket!=tiket)continue; else break; } } return((long)HistoryDealGetInteger(deal_ticket,DEAL_POSITION_ID)); } //+------------------------------------------------------------------+ double normalize(string symbol,double value) { double ts=SymbolInfoDouble(symbol,SYMBOL_TRADE_TICK_SIZE); if(ts==0)return(value); return(NormalizeDouble(value/ts,0)*ts); } //+------------------------------------------------------------------+ double volume_n(string symbol,double lot) { double MinLot=SymbolInfoDouble(symbol,SYMBOL_VOLUME_MIN); double MaxLot=SymbolInfoDouble(symbol,SYMBOL_VOLUME_MAX); double LotStep=SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP); if(lot<MinLot)lot=MinLot; if(lot>MaxLot)lot=MaxLot; if(LotStep==0.001) return(NormalizeDouble(lot,3)); if(LotStep==0.01) return(NormalizeDouble(lot,2)); if(LotStep==0.1) return(NormalizeDouble(lot,1)); return(NormalizeDouble(lot,0)); } //+------------------------------------------------------------------+ void ModifySL(string symbol,double sl) { if(sl<0)return; double price=0.0; double tp=0.0; double last=SymbolInfoDouble(symbol,SYMBOL_LAST); double bid=SymbolInfoDouble(symbol,SYMBOL_BID); double ask=SymbolInfoDouble(symbol,SYMBOL_ASK); double point=SymbolInfoDouble(symbol,SYMBOL_POINT); int digits=(int)SymbolInfoInteger(symbol,SYMBOL_DIGITS); if(last<=0.0) { bid=SymbolInfoDouble(symbol,SYMBOL_BID); ask=SymbolInfoDouble(symbol,SYMBOL_ASK); } else { bid=SymbolInfoDouble(symbol,SYMBOL_LAST); ask=SymbolInfoDouble(symbol,SYMBOL_LAST); } if(bid<=0.0)return; if(ask<=0.0)return; int total=PositionsTotal(); for(int i=total-1; i>=0; i--) { if(PositionGetSymbol(i)==symbol) { //if(PositionGetInteger(POSITION_MAGIC)!=Magic)continue; if(PositionGetInteger(POSITION_IDENTIFIER)==ID) { if(PositionGetDouble(POSITION_SL)==0) { if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY) { sl=NormalizeDouble(normalize(symbol,bid-sl*point),digits); tp=PositionGetDouble(POSITION_TP); trade.PositionModify(symbol,sl,tp); } if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL) { sl=NormalizeDouble(normalize(symbol,ask+sl*point),digits); tp=PositionGetDouble(POSITION_TP); trade.PositionModify(symbol,sl,tp); } } else { if(TrailingStop) { if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY) { sl=NormalizeDouble(normalize(symbol,bid-sl*point),digits); tp=PositionGetDouble(POSITION_TP); if(sl>PositionGetDouble(POSITION_SL)) trade.PositionModify(symbol,sl,tp); } if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL) { sl=NormalizeDouble(normalize(symbol,ask+sl*point),digits); tp=PositionGetDouble(POSITION_TP); if(sl<PositionGetDouble(POSITION_SL)) trade.PositionModify(symbol,sl,tp); } } } } } } } //+------------------------------------------------------------------+ void ModifyTP(string symbol,double tp) { if(tp<0)return; double sl=0.0; double last=SymbolInfoDouble(symbol,SYMBOL_LAST); double bid=SymbolInfoDouble(symbol,SYMBOL_BID); double ask=SymbolInfoDouble(symbol,SYMBOL_ASK); double point=SymbolInfoDouble(symbol,SYMBOL_POINT); int digits=(int)SymbolInfoInteger(symbol,SYMBOL_DIGITS); if(last<=0.0) { bid=SymbolInfoDouble(symbol,SYMBOL_BID); ask=SymbolInfoDouble(symbol,SYMBOL_ASK); } else { bid=SymbolInfoDouble(symbol,SYMBOL_LAST); ask=SymbolInfoDouble(symbol,SYMBOL_LAST); } if(bid<=0.0)return; if(ask<=0.0)return; int total=PositionsTotal(); for(int i=total-1; i>=0; i--) { if(PositionGetSymbol(i)==symbol) { //if(PositionGetInteger(POSITION_MAGIC)==Magic) // { if(PositionGetInteger(POSITION_IDENTIFIER)==ID) { if(PositionGetDouble(POSITION_TP)==0) { if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY) { sl=PositionGetDouble(POSITION_SL); tp=NormalizeDouble(normalize(symbol,bid+tp*point),digits); if(tp>0)trade.PositionModify(symbol,sl,tp); } if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL) { sl=PositionGetDouble(POSITION_SL); tp=NormalizeDouble(normalize(symbol,ask-tp*point),digits); if(tp>0)trade.PositionModify(symbol,sl,tp); } } } //} } } } //+------------------------------------------------------------------+ void Event(string symbol,double Volume) { ulong deal_ticket=0; if(HistorySelectByPosition(ID)) { int total=HistoryDealsTotal(); for(int i=total-1; i>=0; i--) { deal_ticket=HistoryDealGetTicket(i); if(HistoryDealGetString(deal_ticket,DEAL_SYMBOL)==symbol) { //if(HistoryDealGetInteger(deal_ticket,DEAL_MAGIC)==Magic) // { if(HistoryDealGetInteger(deal_ticket,DEAL_ENTRY)==DEAL_ENTRY_OUT) { if(StringFind(HistoryDealGetString(deal_ticket,DEAL_COMMENT),"sl")>=0) { if(HistoryDealGetInteger(deal_ticket,DEAL_TYPE)==DEAL_TYPE_BUY) { if(Open(symbol,ORDER_TYPE_BUY,Volume))flag_open=false; } if(HistoryDealGetInteger(deal_ticket,DEAL_TYPE)==DEAL_TYPE_SELL) { if(Open(symbol,ORDER_TYPE_SELL,Volume))flag_open=false; } } if(StringFind(HistoryDealGetString(deal_ticket,DEAL_COMMENT),"tp")>=0) { flag_open=true; ID=0; } if(HistoryDealGetDouble(deal_ticket,DEAL_PROFIT)<0.0) { if(HistoryDealGetInteger(deal_ticket,DEAL_TYPE)==DEAL_TYPE_BUY) { if(Open(symbol,ORDER_TYPE_BUY,Volume))flag_open=false; } if(HistoryDealGetInteger(deal_ticket,DEAL_TYPE)==DEAL_TYPE_SELL) { if(Open(symbol,ORDER_TYPE_SELL,Volume))flag_open=false; } } } //} } } } } //+------------------------------------------------------------------+
Тестовый код
Попробуйте добавить одну строчку в Ваш код
//+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- trade.SetExpertMagicNumber(Magic); trade.SetMarginMode(); //--- return(INIT_SUCCEEDED); }
Попробуйте добавить одну строчку в Ваш код
скажите, как в советнике запретить торговлю на хеджевых счетах?
пока не будет норм код приведен в вид для хеджа?
проверка на хедж есть?
ACCOUNT_MARGIN_MODE
Новое свойство ACCOUNT_MARGIN_MODE позволяет получить режим расчета маржи и учета позиций на счете:
Идентификатор | Описание |
---|---|
ACCOUNT_MARGIN_MODE_RETAIL_NETTING | Используется для внебиржевого рынка при учете позиций в режиме "неттинг" (по одному символу может быть только одна позиция). Расчет маржи осуществляется на основе типа инструмента (SYMBOL_TRADE_CALC_MODE). |
ACCOUNT_MARGIN_MODE_EXCHANGE | Используется для биржевого рынка. Расчет маржи осуществляется на основе дисконтов, указанных в настройках инструментов. Дисконты устанавливаются брокером, однако не могут быть ниже значений, определенных биржей. |
ACCOUNT_MARGIN_MODE_RETAIL_HEDGING | Используется для внебиржевого рынка при независимом учете позиций ("хеджинг", по одному символу может быть несколько позиций). Расчет маржи осуществляется на основе типа инструмента (SYMBOL_TRADE_CALC_MODE) и с учетом наличия нескольких позиций по одному символу. |
увидел спасибо
Не помогает, все равно работает с первой открытой позицией если MAGIC номер одинаковый у нескольких позиций, задаешь разный для каждой открытой то все нормально работает.
Ну так это конечно так.
Символ одинаковый, мейджик одинаковый. Какую позицию выбирать? Работайте с тикетом позиции. Тикет у каждой позиции уникален

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Состоялся выпуск бета-версии торговой платформы MetaTrader 5 build 1281 с хеджинговой системой учета позиций. Ее отличие от традиционной неттинговой — возможность открытия множества сделок по одному и тому же финансовому инструменту, в том числе — разнонаправленных. Теперь вы можете пользоваться неттинговой моделью для торговли биржевыми инструментами, а хеджинговой — для валютного трейдинга. И все это — внутри одной институциональной платформы MetaTrader 5.
Новая система позиций аналогична привычной вам системе в MetaTrader 4, но содержит расширенные возможности учета ордеров: исполнение ордеров несколькими сделками, в том числе и частичное исполнение. В хеджинговой системе MetaTrader 5, если по финансовому инструменту есть открытая позиция и совершается следующая сделка, то происходит открытие новой позиции. По каждой из позиций можно выставить уровни Stop Loss и Take Profit, а также посмотреть уровень прибыли.
Все желающие могут принять участие в публичном тестировании обновленной мультирыночной платформы MetaTrader 5. Для этого необходимо открыть демо-счет на сервере MetaQuotes-Demo и подключиться к нему. Платформа автоматически обновится до 1281-го билда и вы сможете открыть демо-счет с хеджинговой системой позиций, указав "Use hedge in trading" в диалоговом окне. О выявленных в ходе трейдинга ошибках просим сообщать нам через форум mql5.com или создавать заявки в сервисдеске.
При тестировании необходимо учитывать, что:
Помимо хеджинга, в бета-версии MetaTrader 5 появилось обновленное руководство пользователя с большим количеством иллюстраций и обучающих видеороликов. Просто нажав F1, вы получите ответы на большинство интересующих вас вопросов и узнаете много нового о своей платформе.
С обновленным MetaTrader 5 больше нет необходимости использовать разные платформы для Форекса и фондовой биржи. Теперь это одно универсальное решение для торговли на множестве финансовых рынков.
Загружайте новый бета-билд, пробуйте в действии все новые возможности платформы и сообщайте нам о результатах тестирования. С вашей помощью мы сделаем MetaTrader 5 еще лучше!