sig
  val iter :
    Submit_order.t ->
    con_id:(([< `Read | `Set_and_create ], Submit_order.t,
             Contract_id.t option)
            Fieldslib.Field.t_with_perm ->
            Submit_order.t -> Contract_id.t option -> 'a) ->
    symbol:(([< `Read | `Set_and_create ], Submit_order.t, Symbol.t)
            Fieldslib.Field.t_with_perm -> Submit_order.t -> Symbol.t -> 'b) ->
    sec_type:(([< `Read | `Set_and_create ], Submit_order.t, string)
              Fieldslib.Field.t_with_perm -> Submit_order.t -> string -> 'c) ->
    expiry:(([< `Read | `Set_and_create ], Submit_order.t,
             Core.Std.Date.t option)
            Fieldslib.Field.t_with_perm ->
            Submit_order.t -> Core.Std.Date.t option -> 'd) ->
    strike:(([< `Read | `Set_and_create ], Submit_order.t, Price.t option)
            Fieldslib.Field.t_with_perm ->
            Submit_order.t -> Price.t option -> 'e) ->
    option_right:(([< `Read | `Set_and_create ], Submit_order.t,
                   Option_right.t option)
                  Fieldslib.Field.t_with_perm ->
                  Submit_order.t -> Option_right.t option -> 'f) ->
    multiplier:(([< `Read | `Set_and_create ], Submit_order.t, int option)
                Fieldslib.Field.t_with_perm ->
                Submit_order.t -> int option -> 'g) ->
    exchange:(([< `Read | `Set_and_create ], Submit_order.t, Exchange.t)
              Fieldslib.Field.t_with_perm ->
              Submit_order.t -> Exchange.t -> 'h) ->
    listing_exchange:(([< `Read | `Set_and_create ], Submit_order.t,
                       Exchange.t option)
                      Fieldslib.Field.t_with_perm ->
                      Submit_order.t -> Exchange.t option -> 'i) ->
    currency:(([< `Read | `Set_and_create ], Submit_order.t, Currency.t)
              Fieldslib.Field.t_with_perm ->
              Submit_order.t -> Currency.t -> 'j) ->
    local_symbol:(([< `Read | `Set_and_create ], Submit_order.t,
                   Symbol.t option)
                  Fieldslib.Field.t_with_perm ->
                  Submit_order.t -> Symbol.t option -> 'k) ->
    sec_id_type:(([< `Read | `Set_and_create ], Submit_order.t,
                  Security_id.Type.t option)
                 Fieldslib.Field.t_with_perm ->
                 Submit_order.t -> Security_id.Type.t option -> 'l) ->
    sec_id:(([< `Read | `Set_and_create ], Submit_order.t,
             Security_id.Id.t option)
            Fieldslib.Field.t_with_perm ->
            Submit_order.t -> Security_id.Id.t option -> 'm) ->
    action:(([< `Read | `Set_and_create ], Submit_order.t, string)
            Fieldslib.Field.t_with_perm -> Submit_order.t -> string -> 'n) ->
    quantity:(([< `Read | `Set_and_create ], Submit_order.t, Volume.t)
              Fieldslib.Field.t_with_perm -> Submit_order.t -> Volume.t -> 'o) ->
    order_kind:(([< `Read | `Set_and_create ], Submit_order.t, string)
                Fieldslib.Field.t_with_perm -> Submit_order.t -> string -> 'p) ->
    limit_price:(([< `Read | `Set_and_create ], Submit_order.t,
                  Price.t option)
                 Fieldslib.Field.t_with_perm ->
                 Submit_order.t -> Price.t option -> 'q) ->
    stop_price:(([< `Read | `Set_and_create ], Submit_order.t,
                 Price.t option)
                Fieldslib.Field.t_with_perm ->
                Submit_order.t -> Price.t option -> 'r) ->
    time_in_force:(([< `Read | `Set_and_create ], Submit_order.t,
                    Raw_order.Time_in_force.t option)
                   Fieldslib.Field.t_with_perm ->
                   Submit_order.t -> Raw_order.Time_in_force.t option -> 's) ->
    oca_group_name:(([< `Read | `Set_and_create ], Submit_order.t,
                     string option)
                    Fieldslib.Field.t_with_perm ->
                    Submit_order.t -> string option -> 't) ->
    account_code:(([< `Read | `Set_and_create ], Submit_order.t,
                   Account_code.t)
                  Fieldslib.Field.t_with_perm ->
                  Submit_order.t -> Account_code.t -> 'u) ->
    open_close:(([< `Read | `Set_and_create ], Submit_order.t,
                 Raw_order.Open_close.t)
                Fieldslib.Field.t_with_perm ->
                Submit_order.t -> Raw_order.Open_close.t -> 'v) ->
    origin:(([< `Read | `Set_and_create ], Submit_order.t,
             Raw_order.Origin.t)
            Fieldslib.Field.t_with_perm ->
            Submit_order.t -> Raw_order.Origin.t -> 'w) ->
    order_ref:(([< `Read | `Set_and_create ], Submit_order.t, string option)
               Fieldslib.Field.t_with_perm ->
               Submit_order.t -> string option -> 'x) ->
    transmit:(([< `Read | `Set_and_create ], Submit_order.t, bool)
              Fieldslib.Field.t_with_perm -> Submit_order.t -> bool -> 'y) ->
    parent_id:(([< `Read | `Set_and_create ], Submit_order.t,
                Order_id.t option)
               Fieldslib.Field.t_with_perm ->
               Submit_order.t -> Order_id.t option -> 'z) ->
    block_order:(([< `Read | `Set_and_create ], Submit_order.t, bool)
                 Fieldslib.Field.t_with_perm -> Submit_order.t -> bool -> 'a1) ->
    sweep_to_fill:(([< `Read | `Set_and_create ], Submit_order.t, bool)
                   Fieldslib.Field.t_with_perm ->
                   Submit_order.t -> bool -> 'b1) ->
    display_size:(([< `Read | `Set_and_create ], Submit_order.t,
                   Volume.t option)
                  Fieldslib.Field.t_with_perm ->
                  Submit_order.t -> Volume.t option -> 'c1) ->
    stop_trigger_method:(([< `Read | `Set_and_create ], Submit_order.t,
                          Raw_order.Stop_trigger_method.t)
                         Fieldslib.Field.t_with_perm ->
                         Submit_order.t ->
                         Raw_order.Stop_trigger_method.t -> 'd1) ->
    outside_regular_trading_hours:(([< `Read | `Set_and_create ],
                                    Submit_order.t, bool)
                                   Fieldslib.Field.t_with_perm ->
                                   Submit_order.t -> bool -> 'e1) ->
    hidden:(([< `Read | `Set_and_create ], Submit_order.t, bool)
            Fieldslib.Field.t_with_perm -> Submit_order.t -> bool -> 'f1) ->
    shares_allocation:(([< `Read | `Set_and_create ], Submit_order.t, string)
                       Fieldslib.Field.t_with_perm ->
                       Submit_order.t -> string -> 'g1) ->
    discretionary_amount:(([< `Read | `Set_and_create ], Submit_order.t,
                           float option)
                          Fieldslib.Field.t_with_perm ->
                          Submit_order.t -> float option -> 'h1) ->
    good_after_date_time:(([< `Read | `Set_and_create ], Submit_order.t,
                           Core.Std.Time.t option)
                          Fieldslib.Field.t_with_perm ->
                          Submit_order.t -> Core.Std.Time.t option -> 'i1) ->
    good_till_date_time:(([< `Read | `Set_and_create ], Submit_order.t,
                          Core.Std.Time.t option)
                         Fieldslib.Field.t_with_perm ->
                         Submit_order.t -> Core.Std.Time.t option -> 'j1) ->
    financial_advisor_group:(([< `Read | `Set_and_create ], Submit_order.t,
                              string option)
                             Fieldslib.Field.t_with_perm ->
                             Submit_order.t -> string option -> 'k1) ->
    financial_advisor_method:(([< `Read | `Set_and_create ], Submit_order.t,
                               string option)
                              Fieldslib.Field.t_with_perm ->
                              Submit_order.t -> string option -> 'l1) ->
    financial_advisor_percentage:(([< `Read | `Set_and_create ],
                                   Submit_order.t, string option)
                                  Fieldslib.Field.t_with_perm ->
                                  Submit_order.t -> string option -> 'm1) ->
    financial_advisor_profile:(([< `Read | `Set_and_create ], Submit_order.t,
                                string option)
                               Fieldslib.Field.t_with_perm ->
                               Submit_order.t -> string option -> 'n1) ->
    short_sale_slot:(([< `Read | `Set_and_create ], Submit_order.t,
                      int option)
                     Fieldslib.Field.t_with_perm ->
                     Submit_order.t -> int option -> 'o1) ->
    designated_location:(([< `Read | `Set_and_create ], Submit_order.t,
                          string option)
                         Fieldslib.Field.t_with_perm ->
                         Submit_order.t -> string option -> 'p1) ->
    exemption_code:(([< `Read | `Set_and_create ], Submit_order.t, int)
                    Fieldslib.Field.t_with_perm ->
                    Submit_order.t -> int -> 'q1) ->
    oca_type:(([< `Read | `Set_and_create ], Submit_order.t,
               Raw_order.Oca_type.t option)
              Fieldslib.Field.t_with_perm ->
              Submit_order.t -> Raw_order.Oca_type.t option -> 'r1) ->
    rule80A:(([< `Read | `Set_and_create ], Submit_order.t,
              Raw_order.Rule80A.t option)
             Fieldslib.Field.t_with_perm ->
             Submit_order.t -> Raw_order.Rule80A.t option -> 's1) ->
    settling_firm:(([< `Read | `Set_and_create ], Submit_order.t,
                    string option)
                   Fieldslib.Field.t_with_perm ->
                   Submit_order.t -> string option -> 't1) ->
    all_or_none:(([< `Read | `Set_and_create ], Submit_order.t, bool)
                 Fieldslib.Field.t_with_perm -> Submit_order.t -> bool -> 'u1) ->
    minimum_quantity:(([< `Read | `Set_and_create ], Submit_order.t,
                       Volume.t option)
                      Fieldslib.Field.t_with_perm ->
                      Submit_order.t -> Volume.t option -> 'v1) ->
    percent_offset:(([< `Read | `Set_and_create ], Submit_order.t,
                     float option)
                    Fieldslib.Field.t_with_perm ->
                    Submit_order.t -> float option -> 'w1) ->
    electronic_trade_only:(([< `Read | `Set_and_create ], Submit_order.t,
                            bool)
                           Fieldslib.Field.t_with_perm ->
                           Submit_order.t -> bool -> 'x1) ->
    firm_quote_only:(([< `Read | `Set_and_create ], Submit_order.t, bool)
                     Fieldslib.Field.t_with_perm ->
                     Submit_order.t -> bool -> 'y1) ->
    nbbo_price_cap:(([< `Read | `Set_and_create ], Submit_order.t,
                     float option)
                    Fieldslib.Field.t_with_perm ->
                    Submit_order.t -> float option -> 'z1) ->
    auction_strategy:(([< `Read | `Set_and_create ], Submit_order.t,
                       Raw_order.Auction_strategy.t option)
                      Fieldslib.Field.t_with_perm ->
                      Submit_order.t ->
                      Raw_order.Auction_strategy.t option -> 'a2) ->
    starting_price:(([< `Read | `Set_and_create ], Submit_order.t,
                     Price.t option)
                    Fieldslib.Field.t_with_perm ->
                    Submit_order.t -> Price.t option -> 'b2) ->
    stock_reference_price:(([< `Read | `Set_and_create ], Submit_order.t,
                            Price.t option)
                           Fieldslib.Field.t_with_perm ->
                           Submit_order.t -> Price.t option -> 'c2) ->
    delta:(([< `Read | `Set_and_create ], Submit_order.t, float option)
           Fieldslib.Field.t_with_perm ->
           Submit_order.t -> float option -> 'd2) ->
    lower_stock_price_range:(([< `Read | `Set_and_create ], Submit_order.t,
                              Price.t option)
                             Fieldslib.Field.t_with_perm ->
                             Submit_order.t -> Price.t option -> 'e2) ->
    upper_stock_price_range:(([< `Read | `Set_and_create ], Submit_order.t,
                              Price.t option)
                             Fieldslib.Field.t_with_perm ->
                             Submit_order.t -> Price.t option -> 'f2) ->
    override_percentage_constraints:(([< `Read | `Set_and_create ],
                                      Submit_order.t, bool)
                                     Fieldslib.Field.t_with_perm ->
                                     Submit_order.t -> bool -> 'g2) ->
    volatility:(([< `Read | `Set_and_create ], Submit_order.t, float option)
                Fieldslib.Field.t_with_perm ->
                Submit_order.t -> float option -> 'h2) ->
    volatility_type:(([< `Read | `Set_and_create ], Submit_order.t,
                      Raw_order.Volatility_type.t option)
                     Fieldslib.Field.t_with_perm ->
                     Submit_order.t ->
                     Raw_order.Volatility_type.t option -> 'i2) ->
    delta_neutral_order_type:(([< `Read | `Set_and_create ], Submit_order.t,
                               Order_type.t option)
                              Fieldslib.Field.t_with_perm ->
                              Submit_order.t -> Order_type.t option -> 'j2) ->
    delta_neutral_aux_price:(([< `Read | `Set_and_create ], Submit_order.t,
                              Price.t option)
                             Fieldslib.Field.t_with_perm ->
                             Submit_order.t -> Price.t option -> 'k2) ->
    continuous_update:(([< `Read | `Set_and_create ], Submit_order.t, bool)
                       Fieldslib.Field.t_with_perm ->
                       Submit_order.t -> bool -> 'l2) ->
    reference_price_type:(([< `Read | `Set_and_create ], Submit_order.t,
                           Raw_order.Reference_price_type.t option)
                          Fieldslib.Field.t_with_perm ->
                          Submit_order.t ->
                          Raw_order.Reference_price_type.t option -> 'm2) ->
    trailing_stop_price:(([< `Read | `Set_and_create ], Submit_order.t,
                          Price.t option)
                         Fieldslib.Field.t_with_perm ->
                         Submit_order.t -> Price.t option -> 'n2) ->
    trailing_percent:(([< `Read | `Set_and_create ], Submit_order.t,
                       float option)
                      Fieldslib.Field.t_with_perm ->
                      Submit_order.t -> float option -> 'o2) ->
    scale_initial_level_size:(([< `Read | `Set_and_create ], Submit_order.t,
                               Volume.t option)
                              Fieldslib.Field.t_with_perm ->
                              Submit_order.t -> Volume.t option -> 'p2) ->
    scale_subsequent_level_size:(([< `Read | `Set_and_create ],
                                  Submit_order.t, Volume.t option)
                                 Fieldslib.Field.t_with_perm ->
                                 Submit_order.t -> Volume.t option -> 'q2) ->
    scale_price_increment:(([< `Read | `Set_and_create ], Submit_order.t,
                            float option)
                           Fieldslib.Field.t_with_perm ->
                           Submit_order.t -> float option -> 'r2) ->
    hedge_type:(([< `Read | `Set_and_create ], Submit_order.t,
                 Raw_order.Hedge_type.t option)
                Fieldslib.Field.t_with_perm ->
                Submit_order.t -> Raw_order.Hedge_type.t option -> 's2) ->
    opt_out_smart_routing:(([< `Read | `Set_and_create ], Submit_order.t,
                            bool)
                           Fieldslib.Field.t_with_perm ->
                           Submit_order.t -> bool -> 't2) ->
    clearing_account:(([< `Read | `Set_and_create ], Submit_order.t,
                       string option)
                      Fieldslib.Field.t_with_perm ->
                      Submit_order.t -> string option -> 'u2) ->
    clearing_intent:(([< `Read | `Set_and_create ], Submit_order.t,
                      Raw_order.Clearing_intent.t option)
                     Fieldslib.Field.t_with_perm ->
                     Submit_order.t ->
                     Raw_order.Clearing_intent.t option -> 'v2) ->
    not_held:(([< `Read | `Set_and_create ], Submit_order.t, bool)
              Fieldslib.Field.t_with_perm -> Submit_order.t -> bool -> 'w2) ->
    underlying_combo:(([< `Read | `Set_and_create ], Submit_order.t, bool)
                      Fieldslib.Field.t_with_perm ->
                      Submit_order.t -> bool -> 'x2) ->
    algo_strategy:(([< `Read | `Set_and_create ], Submit_order.t,
                    string option)
                   Fieldslib.Field.t_with_perm ->
                   Submit_order.t -> string option -> 'y2) ->
    request_pre_trade_information:(([< `Read | `Set_and_create ],
                                    Submit_order.t, bool)
                                   Fieldslib.Field.t_with_perm ->
                                   Submit_order.t -> bool -> 'z2) ->
    'z2
  val fold :
    Submit_order.t ->
    init:'->
    con_id:('->
            ([< `Read | `Set_and_create ], Submit_order.t,
             Contract_id.t option)
            Fieldslib.Field.t_with_perm ->
            Submit_order.t -> Contract_id.t option -> 'b) ->
    symbol:('->
            ([< `Read | `Set_and_create ], Submit_order.t, Symbol.t)
            Fieldslib.Field.t_with_perm -> Submit_order.t -> Symbol.t -> 'c) ->
    sec_type:('->
              ([< `Read | `Set_and_create ], Submit_order.t, string)
              Fieldslib.Field.t_with_perm -> Submit_order.t -> string -> 'd) ->
    expiry:('->
            ([< `Read | `Set_and_create ], Submit_order.t,
             Core.Std.Date.t option)
            Fieldslib.Field.t_with_perm ->
            Submit_order.t -> Core.Std.Date.t option -> 'e) ->
    strike:('->
            ([< `Read | `Set_and_create ], Submit_order.t, Price.t option)
            Fieldslib.Field.t_with_perm ->
            Submit_order.t -> Price.t option -> 'f) ->
    option_right:('->
                  ([< `Read | `Set_and_create ], Submit_order.t,
                   Option_right.t option)
                  Fieldslib.Field.t_with_perm ->
                  Submit_order.t -> Option_right.t option -> 'g) ->
    multiplier:('->
                ([< `Read | `Set_and_create ], Submit_order.t, int option)
                Fieldslib.Field.t_with_perm ->
                Submit_order.t -> int option -> 'h) ->
    exchange:('->
              ([< `Read | `Set_and_create ], Submit_order.t, Exchange.t)
              Fieldslib.Field.t_with_perm ->
              Submit_order.t -> Exchange.t -> 'i) ->
    listing_exchange:('->
                      ([< `Read | `Set_and_create ], Submit_order.t,
                       Exchange.t option)
                      Fieldslib.Field.t_with_perm ->
                      Submit_order.t -> Exchange.t option -> 'j) ->
    currency:('->
              ([< `Read | `Set_and_create ], Submit_order.t, Currency.t)
              Fieldslib.Field.t_with_perm ->
              Submit_order.t -> Currency.t -> 'k) ->
    local_symbol:('->
                  ([< `Read | `Set_and_create ], Submit_order.t,
                   Symbol.t option)
                  Fieldslib.Field.t_with_perm ->
                  Submit_order.t -> Symbol.t option -> 'l) ->
    sec_id_type:('->
                 ([< `Read | `Set_and_create ], Submit_order.t,
                  Security_id.Type.t option)
                 Fieldslib.Field.t_with_perm ->
                 Submit_order.t -> Security_id.Type.t option -> 'm) ->
    sec_id:('->
            ([< `Read | `Set_and_create ], Submit_order.t,
             Security_id.Id.t option)
            Fieldslib.Field.t_with_perm ->
            Submit_order.t -> Security_id.Id.t option -> 'n) ->
    action:('->
            ([< `Read | `Set_and_create ], Submit_order.t, string)
            Fieldslib.Field.t_with_perm -> Submit_order.t -> string -> 'o) ->
    quantity:('->
              ([< `Read | `Set_and_create ], Submit_order.t, Volume.t)
              Fieldslib.Field.t_with_perm -> Submit_order.t -> Volume.t -> 'p) ->
    order_kind:('->
                ([< `Read | `Set_and_create ], Submit_order.t, string)
                Fieldslib.Field.t_with_perm -> Submit_order.t -> string -> 'q) ->
    limit_price:('->
                 ([< `Read | `Set_and_create ], Submit_order.t,
                  Price.t option)
                 Fieldslib.Field.t_with_perm ->
                 Submit_order.t -> Price.t option -> 'r) ->
    stop_price:('->
                ([< `Read | `Set_and_create ], Submit_order.t,
                 Price.t option)
                Fieldslib.Field.t_with_perm ->
                Submit_order.t -> Price.t option -> 's) ->
    time_in_force:('->
                   ([< `Read | `Set_and_create ], Submit_order.t,
                    Raw_order.Time_in_force.t option)
                   Fieldslib.Field.t_with_perm ->
                   Submit_order.t -> Raw_order.Time_in_force.t option -> 't) ->
    oca_group_name:('->
                    ([< `Read | `Set_and_create ], Submit_order.t,
                     string option)
                    Fieldslib.Field.t_with_perm ->
                    Submit_order.t -> string option -> 'u) ->
    account_code:('->
                  ([< `Read | `Set_and_create ], Submit_order.t,
                   Account_code.t)
                  Fieldslib.Field.t_with_perm ->
                  Submit_order.t -> Account_code.t -> 'v) ->
    open_close:('->
                ([< `Read | `Set_and_create ], Submit_order.t,
                 Raw_order.Open_close.t)
                Fieldslib.Field.t_with_perm ->
                Submit_order.t -> Raw_order.Open_close.t -> 'w) ->
    origin:('->
            ([< `Read | `Set_and_create ], Submit_order.t,
             Raw_order.Origin.t)
            Fieldslib.Field.t_with_perm ->
            Submit_order.t -> Raw_order.Origin.t -> 'x) ->
    order_ref:('->
               ([< `Read | `Set_and_create ], Submit_order.t, string option)
               Fieldslib.Field.t_with_perm ->
               Submit_order.t -> string option -> 'y) ->
    transmit:('->
              ([< `Read | `Set_and_create ], Submit_order.t, bool)
              Fieldslib.Field.t_with_perm -> Submit_order.t -> bool -> 'z) ->
    parent_id:('->
               ([< `Read | `Set_and_create ], Submit_order.t,
                Order_id.t option)
               Fieldslib.Field.t_with_perm ->
               Submit_order.t -> Order_id.t option -> 'a1) ->
    block_order:('a1 ->
                 ([< `Read | `Set_and_create ], Submit_order.t, bool)
                 Fieldslib.Field.t_with_perm -> Submit_order.t -> bool -> 'b1) ->
    sweep_to_fill:('b1 ->
                   ([< `Read | `Set_and_create ], Submit_order.t, bool)
                   Fieldslib.Field.t_with_perm ->
                   Submit_order.t -> bool -> 'c1) ->
    display_size:('c1 ->
                  ([< `Read | `Set_and_create ], Submit_order.t,
                   Volume.t option)
                  Fieldslib.Field.t_with_perm ->
                  Submit_order.t -> Volume.t option -> 'd1) ->
    stop_trigger_method:('d1 ->
                         ([< `Read | `Set_and_create ], Submit_order.t,
                          Raw_order.Stop_trigger_method.t)
                         Fieldslib.Field.t_with_perm ->
                         Submit_order.t ->
                         Raw_order.Stop_trigger_method.t -> 'e1) ->
    outside_regular_trading_hours:('e1 ->
                                   ([< `Read | `Set_and_create ],
                                    Submit_order.t, bool)
                                   Fieldslib.Field.t_with_perm ->
                                   Submit_order.t -> bool -> 'f1) ->
    hidden:('f1 ->
            ([< `Read | `Set_and_create ], Submit_order.t, bool)
            Fieldslib.Field.t_with_perm -> Submit_order.t -> bool -> 'g1) ->
    shares_allocation:('g1 ->
                       ([< `Read | `Set_and_create ], Submit_order.t, string)
                       Fieldslib.Field.t_with_perm ->
                       Submit_order.t -> string -> 'h1) ->
    discretionary_amount:('h1 ->
                          ([< `Read | `Set_and_create ], Submit_order.t,
                           float option)
                          Fieldslib.Field.t_with_perm ->
                          Submit_order.t -> float option -> 'i1) ->
    good_after_date_time:('i1 ->
                          ([< `Read | `Set_and_create ], Submit_order.t,
                           Core.Std.Time.t option)
                          Fieldslib.Field.t_with_perm ->
                          Submit_order.t -> Core.Std.Time.t option -> 'j1) ->
    good_till_date_time:('j1 ->
                         ([< `Read | `Set_and_create ], Submit_order.t,
                          Core.Std.Time.t option)
                         Fieldslib.Field.t_with_perm ->
                         Submit_order.t -> Core.Std.Time.t option -> 'k1) ->
    financial_advisor_group:('k1 ->
                             ([< `Read | `Set_and_create ], Submit_order.t,
                              string option)
                             Fieldslib.Field.t_with_perm ->
                             Submit_order.t -> string option -> 'l1) ->
    financial_advisor_method:('l1 ->
                              ([< `Read | `Set_and_create ], Submit_order.t,
                               string option)
                              Fieldslib.Field.t_with_perm ->
                              Submit_order.t -> string option -> 'm1) ->
    financial_advisor_percentage:('m1 ->
                                  ([< `Read | `Set_and_create ],
                                   Submit_order.t, string option)
                                  Fieldslib.Field.t_with_perm ->
                                  Submit_order.t -> string option -> 'n1) ->
    financial_advisor_profile:('n1 ->
                               ([< `Read | `Set_and_create ], Submit_order.t,
                                string option)
                               Fieldslib.Field.t_with_perm ->
                               Submit_order.t -> string option -> 'o1) ->
    short_sale_slot:('o1 ->
                     ([< `Read | `Set_and_create ], Submit_order.t,
                      int option)
                     Fieldslib.Field.t_with_perm ->
                     Submit_order.t -> int option -> 'p1) ->
    designated_location:('p1 ->
                         ([< `Read | `Set_and_create ], Submit_order.t,
                          string option)
                         Fieldslib.Field.t_with_perm ->
                         Submit_order.t -> string option -> 'q1) ->
    exemption_code:('q1 ->
                    ([< `Read | `Set_and_create ], Submit_order.t, int)
                    Fieldslib.Field.t_with_perm ->
                    Submit_order.t -> int -> 'r1) ->
    oca_type:('r1 ->
              ([< `Read | `Set_and_create ], Submit_order.t,
               Raw_order.Oca_type.t option)
              Fieldslib.Field.t_with_perm ->
              Submit_order.t -> Raw_order.Oca_type.t option -> 's1) ->
    rule80A:('s1 ->
             ([< `Read | `Set_and_create ], Submit_order.t,
              Raw_order.Rule80A.t option)
             Fieldslib.Field.t_with_perm ->
             Submit_order.t -> Raw_order.Rule80A.t option -> 't1) ->
    settling_firm:('t1 ->
                   ([< `Read | `Set_and_create ], Submit_order.t,
                    string option)
                   Fieldslib.Field.t_with_perm ->
                   Submit_order.t -> string option -> 'u1) ->
    all_or_none:('u1 ->
                 ([< `Read | `Set_and_create ], Submit_order.t, bool)
                 Fieldslib.Field.t_with_perm -> Submit_order.t -> bool -> 'v1) ->
    minimum_quantity:('v1 ->
                      ([< `Read | `Set_and_create ], Submit_order.t,
                       Volume.t option)
                      Fieldslib.Field.t_with_perm ->
                      Submit_order.t -> Volume.t option -> 'w1) ->
    percent_offset:('w1 ->
                    ([< `Read | `Set_and_create ], Submit_order.t,
                     float option)
                    Fieldslib.Field.t_with_perm ->
                    Submit_order.t -> float option -> 'x1) ->
    electronic_trade_only:('x1 ->
                           ([< `Read | `Set_and_create ], Submit_order.t,
                            bool)
                           Fieldslib.Field.t_with_perm ->
                           Submit_order.t -> bool -> 'y1) ->
    firm_quote_only:('y1 ->
                     ([< `Read | `Set_and_create ], Submit_order.t, bool)
                     Fieldslib.Field.t_with_perm ->
                     Submit_order.t -> bool -> 'z1) ->
    nbbo_price_cap:('z1 ->
                    ([< `Read | `Set_and_create ], Submit_order.t,
                     float option)
                    Fieldslib.Field.t_with_perm ->
                    Submit_order.t -> float option -> 'a2) ->
    auction_strategy:('a2 ->
                      ([< `Read | `Set_and_create ], Submit_order.t,
                       Raw_order.Auction_strategy.t option)
                      Fieldslib.Field.t_with_perm ->
                      Submit_order.t ->
                      Raw_order.Auction_strategy.t option -> 'b2) ->
    starting_price:('b2 ->
                    ([< `Read | `Set_and_create ], Submit_order.t,
                     Price.t option)
                    Fieldslib.Field.t_with_perm ->
                    Submit_order.t -> Price.t option -> 'c2) ->
    stock_reference_price:('c2 ->
                           ([< `Read | `Set_and_create ], Submit_order.t,
                            Price.t option)
                           Fieldslib.Field.t_with_perm ->
                           Submit_order.t -> Price.t option -> 'd2) ->
    delta:('d2 ->
           ([< `Read | `Set_and_create ], Submit_order.t, float option)
           Fieldslib.Field.t_with_perm ->
           Submit_order.t -> float option -> 'e2) ->
    lower_stock_price_range:('e2 ->
                             ([< `Read | `Set_and_create ], Submit_order.t,
                              Price.t option)
                             Fieldslib.Field.t_with_perm ->
                             Submit_order.t -> Price.t option -> 'f2) ->
    upper_stock_price_range:('f2 ->
                             ([< `Read | `Set_and_create ], Submit_order.t,
                              Price.t option)
                             Fieldslib.Field.t_with_perm ->
                             Submit_order.t -> Price.t option -> 'g2) ->
    override_percentage_constraints:('g2 ->
                                     ([< `Read | `Set_and_create ],
                                      Submit_order.t, bool)
                                     Fieldslib.Field.t_with_perm ->
                                     Submit_order.t -> bool -> 'h2) ->
    volatility:('h2 ->
                ([< `Read | `Set_and_create ], Submit_order.t, float option)
                Fieldslib.Field.t_with_perm ->
                Submit_order.t -> float option -> 'i2) ->
    volatility_type:('i2 ->
                     ([< `Read | `Set_and_create ], Submit_order.t,
                      Raw_order.Volatility_type.t option)
                     Fieldslib.Field.t_with_perm ->
                     Submit_order.t ->
                     Raw_order.Volatility_type.t option -> 'j2) ->
    delta_neutral_order_type:('j2 ->
                              ([< `Read | `Set_and_create ], Submit_order.t,
                               Order_type.t option)
                              Fieldslib.Field.t_with_perm ->
                              Submit_order.t -> Order_type.t option -> 'k2) ->
    delta_neutral_aux_price:('k2 ->
                             ([< `Read | `Set_and_create ], Submit_order.t,
                              Price.t option)
                             Fieldslib.Field.t_with_perm ->
                             Submit_order.t -> Price.t option -> 'l2) ->
    continuous_update:('l2 ->
                       ([< `Read | `Set_and_create ], Submit_order.t, bool)
                       Fieldslib.Field.t_with_perm ->
                       Submit_order.t -> bool -> 'm2) ->
    reference_price_type:('m2 ->
                          ([< `Read | `Set_and_create ], Submit_order.t,
                           Raw_order.Reference_price_type.t option)
                          Fieldslib.Field.t_with_perm ->
                          Submit_order.t ->
                          Raw_order.Reference_price_type.t option -> 'n2) ->
    trailing_stop_price:('n2 ->
                         ([< `Read | `Set_and_create ], Submit_order.t,
                          Price.t option)
                         Fieldslib.Field.t_with_perm ->
                         Submit_order.t -> Price.t option -> 'o2) ->
    trailing_percent:('o2 ->
                      ([< `Read | `Set_and_create ], Submit_order.t,
                       float option)
                      Fieldslib.Field.t_with_perm ->
                      Submit_order.t -> float option -> 'p2) ->
    scale_initial_level_size:('p2 ->
                              ([< `Read | `Set_and_create ], Submit_order.t,
                               Volume.t option)
                              Fieldslib.Field.t_with_perm ->
                              Submit_order.t -> Volume.t option -> 'q2) ->
    scale_subsequent_level_size:('q2 ->
                                 ([< `Read | `Set_and_create ],
                                  Submit_order.t, Volume.t option)
                                 Fieldslib.Field.t_with_perm ->
                                 Submit_order.t -> Volume.t option -> 'r2) ->
    scale_price_increment:('r2 ->
                           ([< `Read | `Set_and_create ], Submit_order.t,
                            float option)
                           Fieldslib.Field.t_with_perm ->
                           Submit_order.t -> float option -> 's2) ->
    hedge_type:('s2 ->
                ([< `Read | `Set_and_create ], Submit_order.t,
                 Raw_order.Hedge_type.t option)
                Fieldslib.Field.t_with_perm ->
                Submit_order.t -> Raw_order.Hedge_type.t option -> 't2) ->
    opt_out_smart_routing:('t2 ->
                           ([< `Read | `Set_and_create ], Submit_order.t,
                            bool)
                           Fieldslib.Field.t_with_perm ->
                           Submit_order.t -> bool -> 'u2) ->
    clearing_account:('u2 ->
                      ([< `Read | `Set_and_create ], Submit_order.t,
                       string option)
                      Fieldslib.Field.t_with_perm ->
                      Submit_order.t -> string option -> 'v2) ->
    clearing_intent:('v2 ->
                     ([< `Read | `Set_and_create ], Submit_order.t,
                      Raw_order.Clearing_intent.t option)
                     Fieldslib.Field.t_with_perm ->
                     Submit_order.t ->
                     Raw_order.Clearing_intent.t option -> 'w2) ->
    not_held:('w2 ->
              ([< `Read | `Set_and_create ], Submit_order.t, bool)
              Fieldslib.Field.t_with_perm -> Submit_order.t -> bool -> 'x2) ->
    underlying_combo:('x2 ->
                      ([< `Read | `Set_and_create ], Submit_order.t, bool)
                      Fieldslib.Field.t_with_perm ->
                      Submit_order.t -> bool -> 'y2) ->
    algo_strategy:('y2 ->
                   ([< `Read | `Set_and_create ], Submit_order.t,
                    string option)
                   Fieldslib.Field.t_with_perm ->
                   Submit_order.t -> string option -> 'z2) ->
    request_pre_trade_information:('z2 ->
                                   ([< `Read | `Set_and_create ],
                                    Submit_order.t, bool)
                                   Fieldslib.Field.t_with_perm ->
                                   Submit_order.t -> bool -> 'a3) ->
    'a3
end